Fer*_*jka 2 c++ templates type-parameter
我下面有这个简单的代码,一个带有2个类型参数的模板。如果我用相同的类型声明了我的类(例如BidirectionalMap<int,int>),则会收到错误消息:
int BidirectionalMap<T,S>::operator [](T) const' : member function already defined or declared
Run Code Online (Sandbox Code Playgroud)
这是我的模板代码:
template <class T, class S>
class BidirectionalMap{
int count(T t){
return 1;
}
int count(S s){
return 1;
}
};
Run Code Online (Sandbox Code Playgroud)
您得到的错误是正常的,因为替换后您有
template <>
class BidirectionalMap<int, int>
{
int count(int t){ return 1; }
int count(int s){ return 1; } // Duplicated method
};
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,您可以提供部分专业化:
template <class T>
class BidirectionalMap<T, T>
{
int count(T t) { return 1; }
};
Run Code Online (Sandbox Code Playgroud)
在C ++ 20中,您可能会使用requires“丢弃”方法:
template <class T, class S>
class BidirectionalMap
{
int count(T t) requires(!std::is_same<T, S>::value) { /*..*/ }
int count(S s) requires(!std::is_same<T, S>::value) { /*..*/ }
int count(T t) requires( std::is_same<T, S>::value) { /*..*/ }
};
Run Code Online (Sandbox Code Playgroud)