【发布时间】:2011-05-04 02:42:12
【问题描述】:
我应该定义一个接口,明确告知用户他/她应该实现什么,以便将类用作模板参数,还是让编译器在功能未实现时警告他?
template <Class C1, Class C2>
SomeClass
{
...
}
C1 类必须实现某些方法和操作符,编译器在使用它们之前不会发出警告。我应该依靠编译器发出警告还是确保我这样做:
Class C1 : public SomeInterfaceEnforcedFunctions
{
// Class C1 has to implement them either way
// but this is explicit? am I right or being
// redundant ?
}
【问题讨论】:
-
你是多余的。如果你尝试调用 C1 没有的方法,它不会编译,这就足够了。
-
@PigBen:我不同意。如果你把它留给编译器,用户会经常得到一个可怕的、无用的错误信息。通过自己执行要求的一些工作,您可以改进很多。
-
@Jerry -- 这很公平。但是,在我看来,花时间学习理解错误消息会更好。它们不是无用的,只是难以破译。然后可以将该技能应用于理解其他错误,例如误用 STL 时遇到的错误。
-
@PigBen:我不同意——“正确”的答案是 STL 实现(使用你的例子)也被写来检查它的参数。 IMO,没有很好的借口让用户接受模板中典型的错误消息。
标签: c++ templates code-generation