在1语句中传递一个自定义函数作为模板参数
Pass a custom function as template parameter within 1 statement
我成功地将一个函数作为参数传递。
// this is in a scope of a normal function
class DummyClass{
public: static int dummyFunction(G& goo){
return goo.doSomething (); //non-static function
//Edit 3: it calculates hash value
}
};
AMap<G,int,DummyClass::dummyFunction>map;
//... do some other thing
这些伪代码降低了代码的可读性。
我可以用更简洁的方式来称呼它吗?
AMap<G,int,
[](G&goo)->int{ return goo.doSomething (); }
>map;
我试过了,但编译器说
expected compile-time constant expression
看起来编译器认为lambda函数不是编译时间常数,但我确信它的行为是。
我已经阅读了如何使用lambda表达式作为模板参数,但是没有一个解决方案能够提供一个语句的方式。
如果我能把它称为,那我将是理想的选择
AMap<G,int, G::doSomething >map; //note that G::doSomething is non-static
编辑
这就是我宣布AMap 的方式
template<class K,class T,int (* K_uniqueHash)(K&) >AMap {//<--- can be changed
private: int getIndex(K& k){
return K_uniqueHash(k); //<--- can be changed
}
//.. other function
}
您的答案也可以更改上述类别的代码。
编辑2:对AMap的任何修改都不算作额外的行,因为它是一个库。
编辑3:对不起,我的模板可能会产生误导。
映射只使用1个函数进行哈希。
template<class K,class T,int (* K_uniqueHash)(K&) >AMap
^key ^value ^ hashing function
因此,我不希望每个键分配一个功能。
换句话说,粗略地说。。。。
AMap<K,T,k_hasher> aMap;
K k1,k2; T t1,t2;
aMap[ k1 ] = t1; aMap[ k2 ] =t2;
// Then, these statements below will be called internally.
k1.k_hasher();
k2.k_hasher(); //every k call same function "k_hasher"
改用std::function
:
AMap<G,int, std::function<int(G&)>> m;
编辑:
您可以按如下方式更改AMap
类:
template<typename K, typename T, typename F>
class AMap {
int getIndex(K& k) { return K_uniqueHash(k); }
// ...
};
假设您有一个具有成员函数bar
:的class Foo
struct Foo {
int bar(G&);
};
您可以将成员函数以及lambda等传递为:
AMap<G,int, std::function<int(G&)>> m;
auto f = [](G &i)->int { return 42; };
m[0] = f; // if your class works like a map
Foo foo;
m[2] = std::bind(&Foo::bar, &foo, std::placeholders::_1);
相关文章:
- 将自定义函数传递到基抽象类中以延迟执行
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 每个类实例的自定义函数 (C++)
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 具有自定义函数的 C++ 矢量构造函数
- 自定义函数转换错误?
- 模板中的自定义函数C++
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- r-工作程序中对自定义函数的未定义引用(C++和RcppParallel)
- 传递自定义函数类型时的'incompatible types in assignment'
- 从状态内的自定义函数(不是操作)提升 MSM 调用process_event?
- 如何使用C 代码调用MATLAB自定义函数
- glibc函数的GCC、-flto、-fno内置和自定义函数实现
- 自定义函数中断
- 在1语句中传递一个自定义函数作为模板参数
- 特征中的系数自定义函数
- "stoi"没有在此范围内声明,即使添加 -std=c++0x 和自定义函数,仍然适用
- 为什么我的指针在 main 中取消引用后具有不同的值,而不是在我自己的自定义函数中取消引用它时?
- 如何在另一个正在运行的进程中找到自定义函数的地址来钩/绕行?