模板用作默认模板参数

时间:2013-02-01 12:32:00

标签: c++ templates default-parameters

我的课程声明如下:

template< 
    class P, 
    class B, 
    class comparePosition = compareHorizontal< P >
>
class BlahBlah  { ...

其中compareHorizontal是模板函数。当我尝试编译时,clang吐出

[...]/entity.hpp:57:33: error: type name requires a specifier or qualifier
        class comparePosition = compareHorizontal< P >
                                ^

[...]/entity.hpp:57:33: error: C++ requires a type specifier for all declarations
        class comparePosition = compareHorizontal< P >
                                ^~~~~~~~~~~~~~~~~

(同一行上还有很多其他错误)。

如果我只是删除默认模板参数,保持其他所有原样,它编译就好了。所以我想知道,如果可能的话,我将如何使用函数模板作为默认参数?或者我最好只使用调用operator() compareHorizontal的{​​{1}}创建一个仿函数类,然后使用它?

1 个答案:

答案 0 :(得分:1)

我认为原因是模板功能不是一种类型。如果你想到它,它是一个特定的值,函数的类型是这样的:

  template<
       class P,
       class B,
       class C=bool (*)(P&)
   >
   class BlahBlah  {
   };

并编译。就像你说C级= 5级;这也不会编译,因为5不是一个类型。我建议你在这种情况下使用结构。