gpt4 book ai didi

c++ - boost::enable_if_c 错误:不是模板非类型参数的有效类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:36:59 24 4
gpt4 key购买 nike

我想禁止为具有特定类型特征的类型实例化类模板 ( PointCloud )。在下面的示例中,我只想允许带有 is_good 的类型定义为使用:

#include <boost/core/enable_if.hpp>

class PointType1 {};

class PointType2 {};


template <typename T>
struct is_good
{
static const bool value = false;
};

template <>
struct is_good<PointType1>
{
static const bool value = true;
};

template <typename TPoint, typename boost::enable_if_c<is_good<TPoint>::value>::type = 0>
class PointCloud
{
};


int main()
{
PointCloud<PointType1> pointCloud1;

//PointCloud<PointType2> pointCloud2;

return 0;
}

错误是:

error: 'boost::enable_if_c<true, void>::type {aka void}' is not a valid type for a template non-type parameter
PointCloud<PointType1> pointCloud1;
^

据我了解,enable_if_c应该定义 ::type成为TPoint如果is_good<TPoint>::valuetrue .如果是false , 然后 ::type未定义,因此 SFINAE 应该启动。我还认为 typename将表明这确实是一个类型参数。

谁能解释为什么会这样?

最佳答案

当您实例化 PointCloud<PointType1> 时, is_good<TPoint>::valuetrueboost::enable_if_c<is_good<TPoint>::value>::typevoid .

正如错误信息所说,void不是 non-type template parameter 的有效类型.

要修复错误,请为 enable_if_c 指定第二个类型参数而不是使用默认参数 void

template <typename TPoint,
typename boost::enable_if_c<is_good<TPoint>::value, int>::type = 0>
^^^^^

关于c++ - boost::enable_if_c 错误:不是模板非类型参数的有效类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886353/

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