【问题标题】:What is the correct syntax to define specializations of template method定义模板方法特化的正确语法是什么
【发布时间】:2014-03-16 17:10:35
【问题描述】:

假设我用模板方法声明了一个类。

class MyClass {
    ...
    template<typename T> void myMethod(const T& obj);
}

我已经定义了该方法的通用版本

template<typename T>
void MyClass::myMethod(const T& obj) { .... }

并且想要为各种类型定义几个特化。什么是正确的语法? VS2013 编译器似乎不赞成我的尝试。

template<>
void MyClass::myMethod<int>(const int &) {....}

or

template<int>
void MyClass::myMethod(const int &) { .... }

【问题讨论】:

  • 您的语法似乎正确 (live demo),但您忘记了类定义末尾的分号。
  • 没错。我认为我的问题来自于尝试提供在某些情况下而不是“const T&”使用“const T* &”参数的专业化。

标签: c++ templates syntax template-specialization


【解决方案1】:

第一个语法是可以的,作为一个特化。第二个是错误的,因为它定义了template&lt;int&gt;,而myMethod 被声明为template&lt;typename&gt;。但请记住,根本不需要专业化,重载就可以了,比如

class MyClass {
   void myMethod(const int& obj) { ... }
   // ... more overloads
};

当然,如果您需要将声明与定义分开(我避免使用模板),这会导致更多的代码重复。根据类型,您还可以通过这种方式强制执行按值调用,例如

void myMethod(bool obj) { ... }

这不适用于您的专业。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多