c++ - 如何使用具有特定方法的类实例化 C++ 模板

标签 c++ templates inheritance

假设我们有一个类

class X {
public:
  void my_method() { std::cout << "I'm X"; }
} 

我们有一个模板类:

template<typename T> 
class Y
{
public:
    void put(typename T item) { item.my_method(); }

};

如果类 Y 是用 X 类实例化的,我想执行 item.my_method();(否则会出现编译错误)。我该如何解决这个问题?

最佳答案

我不确定我是否完全理解这个问题,因为你的作品有效。

class X
{
public:
    void my_method() { std::cout << "I'm X"; }
};

class Z
{
};

template <typename T>
class Y
{
public:
    void put(T item) { item.my_method(); }
};

int main(int argc, char* argv[])
{
    // This compiles fine
    X theX;
    Y<X> theXY;
    theXY.put( theX );

    // ERROR: This fails to compile
    Z theZ;
    Y<Z> theYZ;
    theYZ.put( theZ );
}

当 Y 与没有 my_method() 成员的类一起使用时,它无法编译。

关于c++ - 如何使用具有特定方法的类实例化 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379992/

相关文章:

c++ - 如何在QGraphicsView 的左下角添加复选框?

c++ - SFINAE 代码检测是否为某个类型实现了 operator<< 在 Clang 和 gcc 上的行为不同

c++ - 带或不带模板参数的模板类复制构造函数参数?

C++ COM接口(interface)继承

c++ - 类继承,AST 类实现的 ENUM 问题

java - 父类和实现的接口(interface)具有相同名称的字段,并且仅在一个类差异内

c++ - 为什么标准类型不提供来自分配器不同的源的转换构造函数/赋值

c++ - 如何不优雅地关闭连接?

c++ - 链接器错误 C++ "undefined reference "

c++ - 通过不返回引用来防止下标运算符赋值会导致运行时崩溃