在这种情况下,如何以有效的方式使用模板
How can i use template in valid way in this case?
我不明白我在下一个代码中遇到的这个问题的原因是什么,什么不是吗?
错误消息:
(1(无效的模板参数
的模板参数列表中的参数3中的不匹配3
(2(无效的模板参数
(3(在"模板类MyClass"
template<typename Data, typename KeyType, typename CompareFunction>
class MyClass{
private:
MyClass* user;
Data data;
KeyType key;
CompareFunction cmpFunction;
public:
MyClass(KeyType key, Data data, CompareFunction cmpFunction);
...
};
///////////////////////////////////////////////////////
bool CMP(int a, int b) {
return a == b;
}
int main{
MyClass<int, int, CMP> *my_class= new MyClass<int, int, CMP>(2, 3); // ALL THE
// ERRORS
...
...
return 0;
}
好吧。所以...您无法使用功能来做到这一点。在C 功能中,功能不是一流的对象。您可以作为模板参数传递的只是建筑类型和类。但是,您可以通过两种方式模拟传递函数:
越2(通过A lambda表达式(一种动态函数(
以下是证明的两种方法:
template<typename Data, typename KeyType, typename CompareFunction>
class MyClass {
private:
MyClass *user;
Data data;
KeyType key;
CompareFunction cmpFunction;
public:
MyClass(KeyType key, Data data, CompareFunction cmpFunction) :
key(key), data(data), cmpFunction(cmpFunction) {}
};
///////////////////////////////////////////////////////
// 1) Functor class
class CMP {
int operator()(int a, int b) {
return a == b;
}
};
// 2) Lambda expression
auto lambda_CMP = [](int a, int b) -> bool { return a == b; };
int main() {
// 1) Using functors:
MyClass<int, int, CMP> * my_class = new MyClass<int, int, CMP>(2, 2, CMP());
// 2) Using lambda expression
MyClass<int, int, decltype(lambda_CMP)> *lambda_class =
new MyClass<int, int, decltype(lambda_CMP)>(2, 2, lambda_CMP);
}
electType 是一个指定符
检查已声明的实体类型或表达式的类型和值类别。 (http://en.cppreference.com/w/cpp/language/decltype(
注意:我必须在构造函数中添加一个初始化列表,因为Lambda的默认构造函数已删除,因此您必须在类中以某种方式分配它。
相关文章:
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 如何以编程方式使窗口全屏显示?
- 保持流打开或每次需要使用时打开它更有效?
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 以编程方式防止重命名或删除文件,但仍使其可写
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 如何以更有效的方式检查一个数字是否是素数?
- 如何使 printf 以与 NSLog 相同的方式打印字符缓冲区?
- 为什么以这种方式使用迭代器有效?
- EIGEN地图类:将C阵列映射到VectorXD指针以有效的方式
- 代码 C++ 以添加前缀关键字以使其有效
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 以有效的方式从 Node .js运行 C 或C++代码
- 在 OpenGL 中渲染对象的哪种方式更有效
- 在哪种方式搜索容器中的元素的方式更有效
- 告诉 PDCurses 以编程方式使窗口与物理屏幕大小相同的方法
- 以常规方式选择有效的随机枚举值
- 哪种沟通方式更有效
- 如何以编程方式使系统崩溃