有没有办法检查是否class有typedef哪个有效private typedef?
以下代码适用于VS2013,但在ideone的gcc上失败
template<typename T>
struct to_void
{
typedef void type;
};
class Foo
{
typedef int TD;
};
template <typename T, typename dummy = void>
struct has_TD : std::false_type {};
template <typename T>
struct has_TD<T, typename to_void<typename T::TD>::type > : std::true_type{};
int main()
{
std::cout << std::boolalpha << has_TD<Foo>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 为什么我想要这个
我有自定义序列化系统,可以序列化任意类型.当它必须表现不同时(例如字符串),它有几个重载.对于其余类型,它只是将值写入内存中.如果我有编写类型,我有时也可以写入内存(保存和加载发生在同一架构上,使用相同的编译器编译,因此填充将是相同的,等等).此方法对于POD类型(std::is_pod特征)有效,但所有POD类型仅是所有类型的子集,支持此序列化.
所以我基本上都有模板化的函数write<T>,它只是写sizeof(T)字节(原始序列化)...但是我不希望这个被错误地调用,我想要用户,在他们的类中明确地说:"这个类/结构可以是原始的序列化过").我这样做的方法是ALLOW_RAW_SERIALIZE定义一些可以通过trait检查的typedef 的宏.如果类MyClass不包含typedef,则调用write(myClassInstance)将产生编译器错误.
基本决定类是否可以原始序列化的东西是它的成员(没有反射,成员不能自动枚举和检查,因此用户必须提供这样的信息).典型的类看起来像这样: …