当编写通用代码时,我经常需要一个简单的类型
例如:
T
,保证sizeof(T) > 1
。例如:
template <typename T>
char test_foo(...);
template <typename T,
typename = std::enable_if_t<std::is_member_function_pointer_v<decltype(&T::foo)>>>
??? test_foo(int);
template <typename T>
struct has_foo : std::bool_constant<sizeof(test_foo<T>(0))!=1> {};
我有几个选项,但都不是理想的:
long long
: 不起作用,详见这里struct SizeNot1 { char dummy[2]; };
: 必须提前定义,有点烦人char (&test_foo())[2];
: 太丑陋了std::array<char, 2>
: 它的大小是否保证?
有任何想法吗?
long long
都足够好,如果你需要标准的绝对保证,那么char (&test_foo())[2]
就可以了。它可以被typedef
成一个更漂亮的名称,然后你就有了解决方案。我相信任何[语言律师]的解决方案都至少和这个一样丑陋。 - Silvio Mayolochar
不保证有8位。 - Slavashort
、long
和long long
都可以是 1 字节。唯一的保证是sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
。 - phuclv