c++ - 选择性启用模板类功能

标签 c++ templates

我有一个模板类,其中有一个正常的函数。但我只想为模板类的某些实例启用此正常功能。我查看了 boost::enable_if ,它并不完全适合我的需要/可能我无法使用它来满足我的需要。

typedef boost::mpl::vector< bool, int, double >  CheckTypes;

template<class X>
class P
{
    void init( int x, 
       typename boost::enable_if< boost::mpl::contains<CheckTypes, X> >::type* dummy = 0);
};

有人可以帮助 mw 解决这个问题吗?重要的是解决方案不应该期望调用代码有任何东西。并且该类被显式实例化。

谢谢, 戈库尔。

最佳答案

enable_if 通常用于区分函数的不同定义。从某种意义上来说,它是一种更强大的重载方式。

看来您仅在条件成立时才尝试启用函数,否则给出编译错误,因为您只有一个init定义。如果这是正确的,您可能需要查看 BOOST_STATIC_ASSERT(或 c++0x 中的 static_assert)。

关于c++ - 选择性启用模板类功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4581512/

相关文章:

C++ 模板选择 - 异常情况

c++ - 使用什么类型的堆以及 c++ 中 std::priority_queue 的时间复杂度?

c++ - 如何在 C++ (g++) 中初始化类中的字符串

c++ - 迭代和递归有什么区别?

c++ - 在 Cython 中优雅地包装模板化对象

c++ - 特化模板类的内部模板

c++ - 只读取也有子文件夹的目录中的 .txt 文件

c++ - 加载程序如何从动态模块分配/释放静态数据

c++ - 来自用户定义文字的字符的整数序列,以字符串为参数

html - 为什么在 PC 中使用原始尺寸图像的 Retina-ready 网站?