如何为可为char或string的模板类实现方法?

威廉·拉·马斯特拉

我有这堂课

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而造成的,但是无论如何我都需要完成任务,我该怎么办?

n314159

在C ++ 17之前的版本中,这似乎是最简单的可能性:

#include <string>

template<class T>
class B {
    T x;
public:

    B(char c);
};

template<>
B<char>::B(char c) : x(c) {}

template<>
B<std::string>::B(char c) : x(std::string(c,10)) {}

int main() {
    B<char> a('a');
    B<std::string> b('b');
    //B<int> c('c'); // Linker error
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为类编写“获取”方法模板

Moq - 如何为泛型基类的方法实现模拟?

如何为包含双重字段的类实现equals / hashCode方法

如何为在基类中实现的按钮调用目标方法

如何为不同的类重用相同的实现方法

如何为嵌套模板类提供推导?

如何为模板类创建“工厂函数”?

Java-如何为基类和派生类实现方法克隆

如何为派生类实现INotifyPropertyChanged?

如何为图像对象实现Java模板方法设计模式:BufferedImage,Image,ImageIcon

如何为具有String []和byte []字段的类实现Parcelable?

C ++-如何为类模板声明函数模板好友

如何实现模板类的前向声明

如何为我的非类型模板类的专业化在声明之外定义方法?

如何为其他类成员函数编写模板包装器方法?

如何为抽象类编写一种返回实现类型的方法?

在 Java 中如何为扩展 Comparator 的类实现多个比较器方法?

C ++-在单独的文件中实现内部模板类的模板方法

如何为C ++函数模板实现简化的界面?

原始类型上可为空的模板类

如何在模板函数中实现模板类类型?

如何为ArrayStack实现toString()方法?

如何为我的班级实现链式方法?

如何为 String 类创建 JTable 的 DefaultRenderer?

如何为Django模板中的字段提供类?

如何为某些模板类型禁用类成员函数

如何为两个不同的模板使用ListView类

如何为模板化类检索boost :: variant值

如何为具有参考的类模板支持移动语义