我在一些代码中看到了以下内容:
template<const Foo& bar>
我被告知其目的是处理大型结构。
我们不能再使用const&amp;直接在代码中非模板化的论点?
使用const引用作为模板参数将参数引用作为参数传递是否是一种好的做法?
答案 0 :(得分:2)
这是non-type template parameter,恰好是const Foo&
类型。
无论它的用途是什么(“大结构”都不是 描述性的),就像所有非类型模板参数一样,它的优点是可以在编译时使用(例如在元程序中) ),它的缺点是你必须在编译时有它的值。它是编译时常量可能也有助于编译器更好地优化它。
以下是一些例子:
struct Foo {};
/////////////////////////////////
// Type template parameter :
template <class T>
struct TypeParame {
T const &tRef; // T is a type
};
/////////////////////////////////
// Non-type template parameters :
// Integral type
template <int I>
struct NonTypeParam {
// I is a value
enum { constant = I };
};
// Reference
template <Foo const &F>
struct RefParam {
// F is a value again
Foo const &ref = F;
};
// Pointer
template <Foo const *F>
struct PtrParam {
// F is still a value
Foo const *ptr = F;
};
// More are possible, but...
// error: 'struct Foo' is not a valid type for a template non-type parameter
template <Foo F>
struct ValParam {};