gpt4 book ai didi

c++ - bool 和 sizeof 条件模板

转载 作者:行者123 更新时间:2023-11-28 02:07:55 26 4
gpt4 key购买 nike

我正在测试我试图用于模板条件的结构,但我遇到了一些奇怪的编译器错误。这是我的代码:

#include <type_traits>
#include <string>

template<typename T1, typename T2,
bool SAME_SIZE = (sizeof(T1)==sizeof(T2))>
struct same_size
{
typedef typename std::false_type value;
};
template<typename T1, typename T2>
struct same_size<T1, T2, true>
{
typedef typename std::true_type value;
};

int main()
{
if(same_size<char,unsigned char>::value)
{
printf("yes");
}
system("PAUSE");
}

我在 Visual Studio 2015 中编译它。这些是我得到的编译器错误:

1>  main.cpp
1>c:\users\luis\documents\visual studio 2015\projects\stringtype\stringtype\main.cpp(18): error C2059: syntax error: ')'
1>c:\users\luis\documents\visual studio 2015\projects\stringtype\stringtype\main.cpp(19): error C2143: syntax error: missing ';' before '{'

谁能阐明这里发生了什么?

最佳答案

您正在使用 value作为类型,而不是值。所以你不能在if中使用它健康)状况。你能做的最好的事情就是使用继承并节省输入。像这样:

#include <type_traits>
#include <string>

template<typename T1, typename T2,
bool SAME_SIZE = (sizeof(T1)==sizeof(T2))>
struct same_size : std::false_type
{
};

template<typename T1, typename T2>
struct same_size<T1, T2, true> : std::true_type
{
};

int main()
{
if(same_size<char,unsigned char>::value)
{
printf("yes");
}
system("PAUSE");
}

@GManNickG 提出了另一个(我认为更好的)解决方案:

template<typename T1, typename T2>
struct same_size : std::integral_constant<bool, sizeof(T1) == sizeof(T2)> {};

当然,上面的好处是更少的输入和更少的错误:在第一个解决方案中,你仍然可以写 same_size<int, int, false>::value并得到错误的结果。

第二种解决方案的美妙之处在于它仍然会生成与 true_type 兼容的类型。和 false_type , 后者是 typedefs对应integral_constant .

旁注,参见模板元编程和 printf在同一个代码中就像看到一对马拉的航天飞机。

关于c++ - bool 和 sizeof 条件模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780678/

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