1

我目前有一个带有模板方法的模板类。与仿函数一起工作很好,但在编译函数时遇到了麻烦。

Foo.h

template <typename T>
class Foo {
   public:
   // Constructor, destructor, etc...
   template <typename Func>
   void bar(T x, Func f);
};

template <typename T>
template <typename Func>
void Foo<T>::bar(T x, Func f) { /* some code here */ }

主文件

#include "Foo.h"
template <typename T>
class Functor {
    public:
    Functor() {}
    void operator()(T x) { /* ... */ }
    private:
    /* some attributes here */
};

template <typename T>
void Function(T x) { /* ... */ } 

int main() {
   Foo<int> foo;
   Functor<int> F;
   foo.bar(2, F); // No problem
   foo.bar(2, Function); // <unresolved overloaded function type>
   return 0;
}
4

1 回答 1

3

如果你想获得一个重载函数的函数指针,你需要告诉系统你想要重载集中的哪个函数:

foo.bar(2, static_cast<void(*)(int)>(&Function);

在引用的情况下,该函数实际上是一个模板,即,您也可以直接参考其特化:

foo.bar(2, &Function<int>);
于 2012-10-17T23:09:17.943 回答