首页 > 解决方案 > 在哪里定义用于 C++ 类的模板成员变量的常量?

问题描述

假设我想定义一个类Foo,它的成员变量也是一个 template Bar<int num> baz。还假设我总是想num成为. 然后大概我可以按如下方式完成此操作:bazFoo

class Foo
{
private:
    Bar<5> baz;
};

但是,这将引入一个幻数,这通常不是好的编程习惯。我已经考虑在类定义 a la 中定义一个常量const int num = 5;,但这会为 的每个实例创建一个额外的整数,Foo如果我有很多实例,这并不理想。我还考虑在类定义之外但在头文件中定义一个常量变量。这样做的好处是可以在.cpp文件中看到,但是会污染全局命名空间。

我的问题是,实现这一目标的最适合风格的方式是什么?理想情况下,会有一些变量只对头文件和.cpp文件可见,并且可以在模板调用中使用。

标签: c++templatesscopeheader-files

解决方案


您需要一个static对所有Foo.

class Foo
{
private:
    static constexpr int num = 5;
    Bar<num> baz;
};

出于同样的原因,幻数被认为是不好的,您可能还需要一个比num.


推荐阅读