对于我的问题,我可以用两种方式使用using
指令。他们基本上归结为这些选择:
template<typename U>
struct A {
private:
// Define our types
using WrapperType = Wrapper<U>;
public:
U *operator()(U *g) const {
// TODO: use WrapperType
}
};
或者:
struct B {
template <typename U>
U *operator()(U *g) const {
// Define the types here instead.
using WrapperType = Wrapper<U>;
// TODO: use WrapperType
}
};
在这两种情况下,都会有其他类模板参数。所以B
仍然会有模板参数,即使它在这个简化的示例中看起来不像它。
我的问题是:
在B
中是否存在本地定义类型的开销? (与A
比较时)?
我不清楚类型声明如何影响生成的代码。代码必须实时运行,这将是代码库的核心。因此,如果有任何开销,我不能使用B
。
话虽如此,B
在我们的案例中更为可取,因为我理想地希望用各种类型调用此代码。是的,这确实需要在课堂上。我刚刚简化了这个例子。
答案 0 :(得分:29)
在生成的代码上是否存在像在B中那样在本地定义类型的开销?
不,没有。
定义类型别名(使用using WrapperType = Wrapper<U>;
执行的操作)仅影响编译,并在运行时开始时完全删除。