我希望有类似的东西
class A
{
public:
Array& operator()()
{ . . . }
};
class B
{
public:
Element& operator[](int i)
{ ... }
};
template<class T>
class execute
{
public:
output_type = operator()(T& t)
{
if(T == A)
Array out = T()();
else
{
Array res;
for(int i=0 ; i < length; ++i)
a[i] = t[i];
}
}
};
这里有两个问题:
感谢您的期待,
诺曼
答案 0 :(得分:3)
只需专门化模板类。
template<class T>
class execute
{};
template<>
class execute<A>
{
A operator()(A& t)
{
/* use A, return A */
}
};
template<>
class execute<B>
{
B operator()(B& t)
{
/* use B, return B */
}
};
答案 1 :(得分:2)
只是重载操作员:
// used for As
Array operator()(A& a)
{
// ...
}
// used for everything else
typename T::Element operator()(T& t)
{
// ...
}
如果您只需A
和B
,则第二个也可能特定于B
:
// used for Bs
B::Element operator()(B& b)
{
// ...
}