我有一个ABC类,我想给它的模板提供一个未知的类变量,如:
template < v >
class ABC
{
// do something
};
当然上面的代码不起作用(没有参数类型 v )。你有什么想法来解决这个问题吗?我不希望给模板提供变量类型 v 。
有两种功能,哪种类型不同。如何在下面的类模板中使用这两个函数?
#include <iostream>
using namespace std;
// Types of functions max1 and min1 are different!
int max1(int a, int b){ return a>b?a:b; }
int& min1(int a, int b){ return a<b?a:b; }
template<typename _T, _T(function)(_T,_T)>
class ABC
{
public:
_T a, b;
_T get()
{
return function(a, b);
}
};
ABC <int, max1> abc; // <- If You write "ABC <int, min1> abc;", error comes! How fix this?
int main()
{
abc.a = 3;
abc.b = 8;
cout << abc.get() << '\n';
cin.get();
return 0;
}
答案 0 :(得分:3)
似乎无关紧要,但问题一开始并不清楚...... <击> 撞击>
<击>template < v >
必须是
template < typename v >
或
template < class v >
typename
更可取。
关于您的修改:问题是,min1
返回&
。如果你删除它,那么你可能有:
#include <iostream>
int max1(int a, int b){ return a>b?a:b; }
int min1(int a, int b){ return a<b?a:b; }
template<typename _T, _T(*function)(_T,_T)>
class ABC
{
public:
_T a, b;
_T get() { return function(a, b); }
};
int main()
{
ABC <int, max1> abc;
ABC <int, min1 > def;
abc.a = def.a = 3;
abc.b = def.b = 8;
std::cout << abc.get() << '\n';
std::cout << def.get() << '\n';
return 0;
}
,这将打印8 3