我想创建基本相同但类型不同的类型安全结构,以便它们需要不同的函数签名。

struct A {
    Time t;
    void doStuff(const A&);
    A getStuff();
};

struct B {
    Time t;
    void doStuff(const B&);
    B getStuff();
};


如果我为课程起诉模板

template<class T>
struct X {
    Time t;
    void doStuff(const X&);
    X getStuff();
};


如何使函数类型安全,并为A类型的结构X和B类型的结构X定义不同的函数签名?

最佳答案

尝试添加一些未使用的模板参数。

template <int>
struct X{
    Time t;
    void doStuff(const X&); // You missed return type
    X getStuff();
}; // You missed a semicolon

// Great thanks to "aschepler"


现在您可以(C ++ 11语法)

using A = X<1>;
using B = X<2>;
// typedef X<1> A;
// typedef X<2> B;


以下代码将失败,这是您想要的:

A a; B b;
a.doStuff(b); // Fail
a = b.getStuff(); // Fail

关于c++ - C++使用类模板创建了多个结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46576447/

10-12 16:19