代码之家  ›  专栏  ›  技术社区  ›  Jonathan Mee

对于visualstudio缺少对自动模板参数的支持,有没有解决方法?

  •  -3
  • Jonathan Mee  · 技术社区  · 6 年前

    auto template parameters 在回答 this question . 一位同事告诉我,他们的工作得到了支持

    struct Foo {
      int mem;
    };
    
    template <auto T>
    decltype(T(Foo{})) bar(const Foo& param)
    {
      return T(param);
    }
    
    int func(const Foo& param) { return param.mem; }
    
    int main() {
      Foo myFoo{ 13 };
    
      cout << bar<&func>(myFoo);
    }
    

    我相信这是一个很好的代码 works fine on gcc

    错误C3533:参数的类型不能包含 汽车

    汽车 模板参数代码,它要求我将函数类型与函数一起作为模板参数传递: template <typename R, R(*T)(const Foo&)> R bar(const Foo& param) 但这与这座城市的优雅格格不入 汽车

    有没有一种方法可以帮助visualstudio编译 汽车

    2 回复  |  直到 6 年前
        1
  •  3
  •   Evg    6 年前

    auto 非类型模板参数仅在VS 2017版本中引入 15.7.0 .

    设计为将任何类型作为非类型参数的模板现在可以使用 汽车

    在此版本之前,它们不受支持。

        2
  •  3
  •   Jonathan Mee    6 年前

    这个 MS help page 国家:

    因此,您可以关闭/Zc:auto,也可以将此函数作为参数传递:

    #include <iostream>
    
    struct Foo {
        int mem;
    };
    
    int func(const Foo& param) {
        return param.mem;
    }
    
    template <class Func>
    auto bar(const Foo& param, Func&& f) {
        return f(param);
    }
    
    int main() {
        Foo f { 42 }; 
        std::cout << bar(f, func);
    }