【问题标题】:The variable parameter template --compiled error可变参数模板--编译错误
【发布时间】:2019-07-27 17:20:07
【问题描述】:

代码在vs2015上编译通过并运行良好,但在gcc/g++ 7.4.0上无法编译并报错,如下: gcc version 7.4.0 error

#include <iostream>
#include <memory>
class AA
{
public:
  template<typename R, typename... Args>
  R invoke(Args... args)
  {
   std::cout<< __FUNCTION__ << ":" << sizeof...(args) << std::endl;
   return R();
  }
  template<typename R, typename... Args>
  R call(Args... args)
  {
    return this->invoke<R, Args...>(args...);
  }
};
template<typename T>
class BB
{
public:
 BB(): lib(new T()){}
 std::shared_ptr<T> lib;
};
template<typename T, typename... Args>
BB<T> make_module(Args... args)
{
   BB<T> obj;
   obj.lib->call<T, Args...>(args...);
   return obj;
}
int main()
{
  BB<AA> obj = make_module<AA>(1, 2, 3);
  return 0;
}

【问题讨论】:

    标签: class c++11 templates variables


    【解决方案1】:

    您在依赖于模板参数T - BB&lt;T&gt; obj 的对象上调用成员函数模板call;你需要使用template来表示call是成员函数模板:

    替换

       obj.lib->call<T, Args...>(args...);
    

    通过

       obj.lib->template call<T, Args...>(args...);
    

    【讨论】:

    • @ZacharyLiu 你确定吗,this link 说了别的。选择 msvc v19.0 (2015)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2016-06-05
    • 2015-08-24
    相关资源
    最近更新 更多