假设我有这样的模板:
template<class T>
class A
{
...
};
我希望这个模板只有在将代替 T
的类型具有特定接口(interface)时才能专门化。比如这个类型必须有这样两个方法:
int send(const char* buffer, size_t size);
int receive(char* buffer, size_t size);
如何对模板进行限制? 感谢您的帮助!
更新:
这个问题是关于 SFINAE 的?与继承或类设计无关。
最佳答案
最简单的方法是在 A
中使用 T::send
和 T::receive
,任何不实现这些的类型都会导致在编译时无法实例化模板。您只需要 SFINAE 来区分模板的特化。
例如
template<class T>
class A
{
void useT(T & theT)
{
char buf[20]
theT.send("Some Thing", 11);
theT.recieve(buf, 20);
}
};
关于具有特定接口(interface)的类型的 C++ 模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095419/