我有一组做使用完全不同的数据类型以完全不同的方式完全不同的事情的模板类。然而,他们确实有共同的方法名称。例如,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);
}
现在,我只是凭着自己的记忆正确定义所有适当的方法。有没有办法让编译器强制执行适当方法的定义?如果没有,有没有更好的方法来做到这一点?
对于第一部分来说,+1但是我认为检查模板参数是否来自特定的基础使得代码更难使用。至少我不希望模板代码行为如此。 – pmr 2011-04-15 14:13:15
@pmr:是的,我不确定这是不是一个好主意。如果你想要更好的诊断,“从这个类派生出来”的评论可能比执行一些不是必须的东西要好。 – 2011-04-15 14:17:05
那么,例如,像这样的东西? http://snipt.org/xgglj – Maxpm 2011-04-15 14:34:27