0

我的班级声明开始如下:

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并使用它来创建一个仿函数类?

4

1 回答 1

1

我认为原因是模板函数不是类型。如果您想到它,它是一个特定的值,函数的类型如下所示:

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

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

于 2013-02-01T12:47:18.710 回答