是否可以使用编译时常量有条件地隐藏或禁用模板类中的函数?
假设下面的类:
template<size_t M, size_t N>
class MyClassT
{
// I only want this function available if M == N, otherwise it is illegal to call
static MyClassT<M, N> SomeFunc()
{
...
}
}
MyClassT<2,2>::SomeFunc(); // Fine
MyClassT<3,2>::SomeFunc(); // Shouldn't even compile
3条答案
按热度按时间ih99xse11#
使用部分专门化和继承:
另一种选择是使用SFINAE:
std::enable_if
或其变体:更详细的替代方案(但如果您不了解SFINAE和指向数组的指针,就不会感到惊讶)是
通常,我更喜欢SFINAE方法,其中有一个或两个成员函数要启用或禁用。一旦它变得比这更复杂,我更喜欢部分专门化技术。
6ju8rftf2#
提供专门化的理想方法是使用模板专门化。你可以将所有的基本功能移到基类中:
或者,您可以添加一个虚拟模板参数并使用
enable_if
:6psbrbz93#
在C++20中,可以使用constraint: