小编Sis*_*dám的帖子

是否可以在C++类中声明虚拟静态常量值?

我想要一个具有常量字段的基类(比如与编译时间后无法修改的类关联的唯一ID).到目前为止static const声明会很好.现在,我想继承这个基类,并确保这个类的子类具有相同的字段,但具有自己的值.我怎样才能做到这一点?

让我们说,我希望有一个基类,调用Base一个值为0 的ID字段int.然后,我想要这些类A,B并且C,所有这些都是公共的孩子,Base我想做确保这些孩子也会有ID相应值为1,2和3 的字段(通过'确定',我的意思是如果他们没有明确声明ID,就会遇到编译器错误).

如果我可以设法构建这个场景,我的期望是要求指针的ID字段Base*,我应该得到不同的值,这取决于指针是否被创建为new A(),new B()new C().

我的猜测是声明IDvirtual static const,这当然没有意义并且给出了编译器错误.

但是,我该怎样做才能达到上述结果呢?(我唯一可以想象的是声明ID为返回整数的虚函数,然后将值硬编码到函数体中,但我正在寻找更优雅的东西.)

先感谢您!

c++ virtual inheritance constants static-members

16
推荐指数
1
解决办法
8435
查看次数

带有模板模板参数的'operator <<'的模糊重载

我正在尝试创建一个模板类,其中一个人可以将类使用的(STL)容器定义为模板参数.所以我做了以下事情:

template <typename T = float,
          template < class, class > class Container = std::vector,
          class Alloc = typename std::vector < Spectrum < T > >::allocator_type>
class Spectrogram;
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我为流操作符定义我的重载时

// Definition inside the 'public' part of the 'Spectrogram' class
template <typename Type,
          template < class, class > class C,
          class A>
friend std::ostream & operator << ( std::ostream &, const Spectrogram < Type, C, A > & );

// Implementation
template <typename Type,
          template < class, class > class C, …
Run Code Online (Sandbox Code Playgroud)

c++ templates operator-overloading

5
推荐指数
1
解决办法
973
查看次数