【发布时间】:2020-02-04 15:53:19
【问题描述】:
我有这门课
template <typename T>
class B{
T x;
public:
B(char c){
if(typeid(x)==typeid(char)) x=c;
else{
string h;
for(int i=0;i<10;i++) h.push_back(c);
x=h;
}
}
};
这是一个示例类,如果 x 的类型是 char 我希望 x=c 而如果 x 是字符串我希望 x 是 [c]^10
然后我尝试创建两个对象:
int main(){
B<string> a('f');
B<char> b('g');
}
当 i 对象 b 被实例化时,编译器会在第 10 行产生错误:
[Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'char' in assignment
我了解错误来自您无法将字符串分配给 char 的事实,但无论如何我都需要完成任务,我该怎么做?
【问题讨论】:
-
这看起来更像是两个不同的类而不是模板。
-
如果
T不是char而不是std::string,会发生什么? -
@MarekR:模板不必处理所有类型,即使
std::uniform_real_distribution也只能处理float/double/long double。 -
@Jarod42 我知道模板正在使用鸭子类型。问题的更多细节可以导致更合适的解决方案。