我尝试根据std::conditional_t
类型定义类成员的 std::function 模板参数:
template <class T, size_t N = 1>
class MyClass {
static_assert( (N > 0), "0 or less feature element isn't allowed");
public:
typedef std::conditional_t<(N == 1), void, uint32_t> index_t;
private:
std::function<T(index_t)> fRead;
public:
template <typename U = T>
std::enable_if_t<(N==1), U> getData()
{ return fRead(); }
template <typename U = T>
std::enable_if_t<(N>1), U> getData(uint32_t index)
{
if (index >= N) {
throw std::out_of_range ("Index is out of range!");
}
return fRead(index);
}
}
如果 N==1 并且如果 N>1,则类型fRead
应该是。std::function<T(void)> fRead;
std::function<T(uint32_t)> fRead;
不幸的是我收到了编译器错误:error: invalid parameter type ‘std::conditional<true, void, unsigned int>::type’ {aka ‘void’}
。
fRead 成员用 lambda 函数初始化(该片段中未显示)。
我发现一些信息表明这void
不是一个有效类型,不允许将其用作模板参数std::conditional_t
。但不幸的是,我不知道如何解决这个问题。
void
作为一个参数,conditional_t
原则上可以正常工作,您只需考虑最终在哪里使用它。在这种情况下,您使用它来形成
function<T(void)>
无效的形式。另一种选择可能是: