繁体   English   中英

如何通过类模板的参数指定成员函数(内部类更好)?

[英]How to specify a member function (inside class is better) by the argument of class template?

我有一些像

enum Type {ONE, TWO};

template <enum Type T>
class A {
    void foo() {}
};

我想根据该类的模板参数T指定函数foo() 可以在课堂上完成吗? 或者,在课堂外如何做?

编辑:

如果我的课是

template <class U, enum Type T>
class A {
    void foo() {}
};

不能通过给出两个版本的foo来简单地对该类进行专门化,我在以下部分找到了解决方案: 部分模板专门化有什么问题? 这可能会使代码变得很长。

还有其他解决方案,还是应该使用其他设计?

您可以显式专门化类模板的成员函数。 您只需:

template <>
void A<ONE>::foo()
{
//ONE stuff
}

另外,您可以使用标记分派。 在这种特定情况下,它们没有多大意义,但是如果您的要求略有不同,它们可能会有意义。

template <enum Type T>
class A
{
public:
  void foo() {fooImpl(std::conditional_t<T==ONE, std::true_type, std::false_type>());}

  void fooImpl(std::true_type)
  {
    cout << "ONE" << endl; 
  }

  void fooImpl(std::false_type)
  {
    cout << "TWO" << endl; 
  }
};

根据以上定义,

int main()
{
  A<ONE>().foo();
  A<TWO>().foo();
  return 0;
}

版画

ONE
TWO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM