gpt4 book ai didi

c++ - 检测类型是否可以从 C++ 派生

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:31 24 4
gpt4 key购买 nike

我有以下模板类及其类型的(全局)变量:

template <typename ClassT>
struct ClassTester : public ClassT {
typedef ClassT type;
};

ClassTester<int> *aaa; // No error here

我预计会出现编译错误,因为无法派生 int,但这在 Visual C++ 2010 下编译得很好。

如果删除指针,则会出现预期的编译错误(无法派生 int):

ClassTester<int> bbb; // Error here

我想将此类用于 SFINAE 测试给定类型是否是可以派生自的类:

template <typename T>
struct CanBeDerivedFrom {

template <typename C>
static int test(ClassTester<T> *) { }

template <typename>
static char test(...) { }

static const bool value = (sizeof(test<T>(0)) == sizeof(int));
};

但是,由于上述原因,即使对于诸如 int 之类的原始类型,这也始终报告为真。这是 C++ 的预期/有效行为吗?

最佳答案

不要重新发明轮子。使用 boost::is_class boost reference manual

那些人比你更了解。

关于c++ - 检测类型是否可以从 C++ 派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8397833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com