自由函数的模板参数

时间:2017-03-13 14:00:44

标签: c++ templates template-meta-programming template-templates

我正在尝试使用模板模板参数。 我没有问题让他们使用类,但由于某种原因它不适用于函数。

enum class MyEnum { A, B, C, D};

  template<class EnumType, template<EnumType> class Fun >
  class MyTest
    {
    }

    template<MyEnum myEnum>
      void freeFunc(int argument)
        {
        LOG_ERROR("  void freeFunc(int argument) default case!!! ");
        }

      template<>
      void freeFunc<MyEnum::A>(int argument); // implemented in cpp

      template<>
      void freeFunc<MyEnum::B>(int argument); // implemented in cpp

      template<>
      void freeFunc<MyEnum::C>(int argument); // implemented in cpp

      template<>
      void freeFunc<MyEnum::D>(int argument); // implemented in cpp


template<MyEnum s>
class Cde
  {
   public:
  };


  MyTest<MyEnum, Cde > test1; // does compile

  MyTest<MyEnum, freeFunc > test2; // does not compile

我不明白为什么test2不能编译。它只是说:  错误:期望一个类模板,得到了#FreeFunc&#39;

我做错了什么?

[edit]我正在寻找的是一种获取通用方法的方法,以获得在枚举类中模板化的自由函数和类模板

1 个答案:

答案 0 :(得分:1)

请注意,功能模板不能用作template template argument

  

模板模板参数的模板参数必须是id-expression,用于命名类模板或模板别名。