具有特定接口(interface)的类型的 C++ 模板特化

标签 c++ templates template-specialization

假设我有这样的模板:

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::sendT::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/

相关文章:

从函数返回的 C++ 类型的 lambda 闭包

c++ - 使用不完整类型显式实例化函数模板

c++ - 将右移运算符用作模板参数时出现语法错误

C++14 警告 : too many template headers for variable (should be 0)

c# - 使用策略模式在 C# 上实现类似行为的多参数 C++ 模板

c++ - 使用 minGW 构建 Boost

python - 谁删除了python中的内存?

c++ - Arduino:无法将取消引用的指针值从库函数返回到草图

c++ - 如何在类模板中有效地初始化 std::variant 数据成员

c++11 - 检测两种类型是否是同一类模板的特化?