出于性能原因,我使用带有枚举的模板化类而不是继承中的中继(它不是一个选项).
在这一点上,我有类似的东西:
typedef enum { A, B, C, D } QueueType;
template <QueueType T> class Queue {
Queue(int a){...} // only usable when T = A
Queue(unsigned a, unsigned b){...} // only usable when T = B || T = C
Queue(somestruct z){...} // only usable when T = B || T = C
//other constructors
}
Run Code Online (Sandbox Code Playgroud)
现在,如果T为定义的内容调用不兼容的构造函数,我正在使用烦人的ifs/switch 和上升异常T.
我想要的是使用std::enable_if或等效防止在构造函数上抛出异常并在编译时检测这种错误.
我已经尝试了很多堆栈溢出和外部站点的std::enable_if例子,但我几乎无法理解我真正在做什么,而且我总是以编译错误结束.
在此先感谢并抱歉要求提出一个可能非常简单的问题.我是模特的菜鸟.
环境:Linux GCC 8和c ++ 14 限制:没有虚拟方法的最大性能.
我正在使用一个简单的将一个项目包含到我的项目中add_subdirectory。
但是,该项目非常冗长,并且在我的构建中充满了很多信息。无需修改外部项目...是否可以删除所有(或部分)那些烦人的导入消息?