【发布时间】:2018-12-02 11:55:45
【问题描述】:
假设我有这样的模板:
template<class T>
class A
{
...
};
我希望这个模板只有在将替换T 的类型具有特定接口时才能被特化。比如这个类型必须有这样两个方法:
int send(const char* buffer, size_t size);
int receive(char* buffer, size_t size);
如何对模板进行此限制? 感谢您的帮助!
更新:
这个问题是关于 SFINAE 的?与继承或类设计无关。
【问题讨论】:
-
不要将模板与抽象基类要求混淆。如果您需要一组特定的函数,将该接口定义为一个类并使其成为一个简单的类型化需求。
-
@tadman 假设您可以将基类添加到您感兴趣的所有类型中。
-
@Caleth 这就是多重继承的意义所在。在 C++ 有协议支持之前,事情就是这样摆脱的。
-
@tadman 我的意思是,您可能从第三方接收具有这些方法的对象,您无法控制实例化,因此您无法更改类
标签: c++ templates template-specialization