gpt4 book ai didi

c++ - 使用 mpl::if_ 和整数模板参数选择类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:32 26 4
gpt4 key购买 nike

以下代码适用于 Visual Studio 2005,但在使用 g++ 4.4.5 编译时出现编译器错误:

#include <boost/mpl/if.hpp>
#include <boost/mpl/bool.hpp>

template<int X> struct A
{
void f() {
typedef boost::mpl::if_<boost::mpl::bool_<X == 1>, int, bool>::type Type;
}
};

这是我得到的错误:

main.cpp: In member function ‘void A<X>::f()’:
main.cpp:12: error: too few template-parameter-lists

代码有什么问题?如果我将模板化的 X 替换为硬编码数字,则代码可以正常编译。我也尝试过用 mpl::int_ 类型包装 X 但没有成功。

谢谢!

最佳答案

您需要 typename关键词:

typedef typename                   // <-- Here
boost::mpl::if_<
boost::mpl::bool_<X == 1>,
int,
bool
>::type Type;

编译器不能确定 mpl::if_<...>::type是一种类型,因为它不知道 X 的值: if_可以专门用于某些参数并包括 type不是类型的成员,例如:

//Silly if_ specialization
template <typename Then, typename Else>
struct if_<void, Then, Else>
{
int type;
};

因此,您需要显式地告诉编译器 ::type表示一种类型,带有 typename关键字。

请在此处查看深入解释:Where and why do I have to put the template and typename keywords .

关于c++ - 使用 mpl::if_ 和整数模板参数选择类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016660/

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