我知道,我可以将类模板作为模板参数传递,如下所示:
template <template <class> class ClassTemplate>
void foo()
{
ClassTemplate<int> x;
}
int main()
{
foo<std::optional>();
}
但是假设我有一个变量模板:
template <class T>
constexpr bool IsBig = sizeof(T) >= sizeof(void*);
如何将它作为模板参数传递?有简单的解决方案吗?我猜该语言根本不支持它。这不起作用:
template <template <class> bool VariableTemplate> // fictional C++ syntax
void foo()
{
bool b = VariableTemplate<int>;
}
int main()
{
foo<IsBig>();
}
标准化委员会是否正在努力将上述语法(或类似语法)作为新功能包含在 C++ 中?
我没有找到简单的解决方案。我想这就是为什么所有类型特征目前都由 STL 中的一个类(带有...::type
和...::value
成员)表示。我想避免使用类作为特征。例如,最直接的实现方式IsBig
是变量模板。