调用模板成员函数

金黄色

我试图在类模板中调用对象的成员函数,但无法获取以下代码进行编译。我在这里找到了可以使用的帖子object.template method<T>();

使用MSVC 2015,我得到错误C2059:语法错误:'模板'

#include <iostream>

class Bar
{
public:
    Bar() : m_x(0.f) { }
    ~Bar() { }

    void setX(double x) { m_x = x; }
    void printX(void) { std::cout << m_x << std::endl; }

private:
    double m_x;
};

template <class T>
class Foo
{
public:
    Foo() { }
    ~Foo() { }

    void setBar(T bar) { m_bar = bar; }
    void printBar(void) { m_bar.template printX<T>(); } // This is the issue

private:
    T m_bar;
};

int main()
{
    Bar bar;
    bar.setX(20.f);
    bar.printX();

    Foo<Bar> foobar;
    foobar.setBar(bar);
    foobar.printBar();

    return 0;
}
纪尧姆·拉西科特(Guillaume Racicot)

您的函数printX不是成员模板函数。为什么您尝试将其称为模板?

//                          ,--- Not a template, so you must use
//                          v    You must use the function like any other function 
void printBar(void) { m_bar.printX(); }

template关键字与从属类型的成员函数模板一起使用。如果函数printX是模板,并且您想指定模板参数而不是推导,那么语法将类似于您提到的问题中的示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:转发模板成员函数调用失败

来自分类Dev

用std :: async调用模板成员函数

来自分类Dev

递归调用模板类的成员函数

来自分类Dev

用std :: async调用模板成员函数

来自分类Dev

C ++模板:从基类调用派生模板类的成员函数

来自分类Dev

使用成员函数调用可变参数模板函数

来自分类Dev

模板参数成员函数调用的result_of

来自分类Dev

没有调用C ++模板化静态成员构造函数

来自分类Dev

C ++使用模板类调用非静态成员函数

来自分类Dev

模板参数成员函数调用的result_of

来自分类Dev

奇怪的重复模板模式非法调用非静态成员函数

来自分类Dev

包装成员函数调用的模板化类的行为

来自分类Dev

模板或成员函数选择

来自分类Dev

模板成员函数继承

来自分类Dev

模板类的成员函数

来自分类Dev

std线程调用模板类的模板成员函数:编译器错误

来自分类Dev

在实例上调用时找不到模板类中的模板成员函数

来自分类Dev

另一个类的模板成员函数中的模板类中的调用方法

来自分类Dev

模板类的std线程调用模板成员函数:编译器错误

来自分类Dev

调用成员函数指针

来自分类Dev

错误调用成员函数

来自分类Dev

调用成员函数prepare()

来自分类Dev

从C ++中的类模板中的函数调用另一个成员函数

来自分类Dev

const成员函数中模板成员的常数

来自分类Dev

模板类成员函数的参数

来自分类Dev

模板类的成员函数指针

来自分类Dev

从成员函数返回模板类

来自分类Dev

std :: bind与模板成员函数

来自分类Dev

成员函数的模板和指针