【发布时间】:2013-04-01 12:53:35
【问题描述】:
我有一个 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;
}
【问题讨论】:
-
我不明白。如果您向我们展示您想如何使用它,也许会有所帮助。
-
也许您似乎认为变量是在
template<...>中声明的,而函数体是放在类体中的? -
如果你把 _T (function)(_T, _T) 改成 _T(*)(_T, _T) 有什么改变吗?
-
Err,你正在做的事情是不可能的。唯一可以进入模板列表的是类型和整数常量。 max1 既不是类型也不是常量。