哪种方法更好,为什么?

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(它们使用静态成员函数)。

09-10 04:49
查看更多