c++ - 强制使用通用方法名称

标签 c++ oop design-patterns methods user-defined-functions

注意:这是 this. 的后续问题

我有一组模板类,它们使用完全不同的数据类型以完全不同的方式做完全不同的事情。但是,它们确实共享通用的方法名称。例如,Get()Set()Resize() 等对于所讨论的每个类都是有效的方法。此外,它们以相同的顺序接受参数。这允许广义的非友元、非成员函数在每个类上工作。一个简化的例子:

template <typename Class, typename Datatype>
void Insert(const Class<Datatype>& Object, const std::size_t Index, const Datatype Value)
{
    Object.Resize(Object.Size() + 1);
    for (std::size_t CurrentIndex = Object.Size() - 1; CurrentIndex > Index; CurrentIndex--)
    {
        Object.Set(CurrentIndex, Object.Get(CurrentIndex - 1));
    }
    Object.Set(Index, Value);
}

现在,我只是依靠自己的内存来正确定义所有适当的方法。有没有办法让编译器强制执行正确方法的定义?如果没有,是否有更好的方法来做到这一点?

最佳答案

您要查找的内容称为“concepts”,它曾经是 C++0x 中的一项功能,但已从新标准中删除。

C++03 有一些实现,但它们更难使用,可能不值得麻烦。例如Boost Concept Checking

gcc 也有 --enable-concept-check 选项,虽然我不完全确定它如何与用户代码一起工作。

关于c++ - 强制使用通用方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677745/

相关文章:

java - 访客与组合

c++ - 相互友情指点 : What Pattern or anti-pattern is this?

c++ - 我是否在简单的 OpenMP for 循环中误用了引用变量,还是 clang 错误?

c++ - 如何在调试期间取消引用指针

javascript - 如何在使用相同方法时生成新对象

c# - 在实现上实现接口(interface)的 `internal set` 属性

java - 无法调用初始化为父类(super class)的 ArrayList 中派生类的方法

design-patterns - 里氏替换原则 (LSP)、代理模式和异常(exception)

c++ - std::isgraph 在使用 `using namespace std` 时不明确

c++ - 将 printf 和 cout 重定向到套接字