Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制使用模板参数实现C++;? P>我不认为C++中有可能,我有什么选择来模拟行为?_C++_Templates_Interface - Fatal编程技术网

如何强制使用模板参数实现C++;? P>我不认为C++中有可能,我有什么选择来模拟行为?

如何强制使用模板参数实现C++;? P>我不认为C++中有可能,我有什么选择来模拟行为?,c++,templates,interface,C++,Templates,Interface,使用std::is_base_of作为: template<typename T> class A { static_assert(std::is_base_of<IMyInterface, T>::value, "T must derive from IMyInterface"); }; 模板 甲级 { static_assert(std::是::value的_base_), “T必须来自IMyInterface”); }

使用
std::is_base_of
作为:

template<typename T>
class A
{
    static_assert(std::is_base_of<IMyInterface, T>::value, 
                  "T must derive from IMyInterface");
};
模板
甲级
{
static_assert(std::是::value的_base_),
“T必须来自IMyInterface”);
};

您也可以在函数模板中使用相同的函数。

您可以使用
std::is_base_of
,如果结果为
false
,则会出错。记住这是C++11。

一些多态接口还是一些静态接口?
后者可以通过检查。

您是指java方式的接口(即它继承抽象基类X),还是仅仅指它支持一组操作?如果您尝试使用该接口,您肯定会注意到它是否不存在。我认为这是正确的答案。如果某人已经有了一个可以用std::is_base_of检查的接口,那么他不需要模板参数。允许指定“模板接口”的特性被称为“概念”和“否”,目前它不被C++支持。它本来应该是C++11的一部分,但没有成功。C++1y可能会拥有它。现在,您可以使用前面提到的Boost概念。