我有一个模板化类 XX 并且想将它的实例化限制为仅类型 T 是另一个类 ZZ 的后代:

class ZZ {
public:
    int transmorgificationFactor;
};

template <typename T>
class XX {
public:
    static_assert(std::is_base_of<ZZ, T>, "T must be a ZZ");
    T foo;
    // ...
};
使用 Visual Studio 2019 C++ (ISO C++17) 我得到

这不是使用 std::is_base_of<> 的正确方法吗?

最佳答案

std::is_base_of 是一种类型,不能用作 static_assert 中的条件。您正在寻找 std::is_base_of_v 代替:

static_assert(std::is_base_of_v<ZZ, T>, "T must be a ZZ");
                          // ^^
或 C++17 之前的版本,您可以执行以下操作:
static_assert(std::is_base_of<ZZ, T>::value, "T must be a ZZ");
                                 // ^^^^^^^

关于c++ - 如何根据模板类型的祖先限制类的实例化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64407527/

10-12 17:29