哪种方法更好,为什么?
template<typename T>
struct assistant {
T sum(const T& x, const T& y) const { ... }
};
template<typename T>
T operator+ (const T& x, const T& y) {
assistant<T> t;
return t.sum(x, y);
}
要么
template<typename T>
struct assistant {
static T sum(const T& x, const T& y) { ... }
};
template<typename T>
T operator+ (const T& x, const T& y) {
return assistant<T>::sum(x, y);
}
为了进一步解释这些事情:
assistant
没有状态,它仅提供几个实用程序功能,以后我可以定义它的模板特化功能,以实现某些类型T
的不同行为。我认为对于更高的优化级别,这两种方法不会导致不同的字节码,因为无论如何
assistant
将优化“离开” ...谢谢!
最佳答案
通常,这不是运行时性能的问题,而是可读性的问题。前一个版本告知潜在的维护者某种形式的对象初始化已执行。后者使意图更加清晰,因此(我认为)应优先考虑。
顺便说一句,您创建的基本上是一个traits类。看一看how traits are done in the standard library(它们使用静态成员函数)。