【问题标题】:Class partial specialization inheriting methods类偏特化继承方法
【发布时间】:2020-06-27 21:54:33
【问题描述】:
template <unsigned N>
class A {
    void common_function();
};

template <>
class A<1> {
    void new_functionality();
};

我希望 A&lt;1&gt; 类从 A 类继承 common_function()

如果您需要为类的部分特化添加一些功能,但又不想重复常用方法,这将非常有用。

【问题讨论】:

  • 你可以从基类继承东西。
  • @user253751 我不能从 A 继承 A,因为 A 是一个模板类。另一方面,我也不能从基类继承 A 和 A,因为在常用函数中我想使用模板参数 N.
  • 相关(但不重复):stackoverflow.com/questions/16765179
  • @RomanovSaveliy 正确!所以你需要创建一个基类。而且因为要使用模板参数 N,所以基类必须是模板。

标签: c++ class templates methods


【解决方案1】:

虽然你说的是部分特化,但这实际上是一种显式特化。这并不重要,因为显式和部分特化都是与基本模板不同的类型。

实现您想要的方法是引入另一种类型(可能根本不是模板)来处理共享功能,并从该类型派生您的基本模板和特化。

struct shared
{
  void common_function() { ... } 
};

template<unsigned N>
class a : public shared
{ void foo() { std::cout << "a<N>::foo" << std::endl; }
};

template<>
class a<1> : public shared
{
  void foo() { .std::cout << "a<1>::foo" << std::endl; }
};

【讨论】:

  • 如果 common_function() 使用模板参数 N,您的解决方案将不起作用。虽然我希望 A 中的 common_function() 像从 N = 1 的类 A 中调用它一样工作。
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多