c++ - 无法转换函数指针参数

标签 c++ templates function-pointers v8

我得到的错误:

error C2664: 'v8::FunctionTemplate::New' : cannot convert parameter 1 from 'v8::Handle<T> (__cdecl *)(const v8::Arguments &)' to 'v8::InvocationCallback'

相关定义:

typedef Handle<Value> (*InvocationCallback)(const Arguments& args);




template<class C> class V8ScriptClass
{
public:
    template<class C, typename Rtype, typename Ptype1, Rtype (C::*FuncPtr)(Ptype1)> 
    void RegisterFunc(const char* const scriptname)
    {
        objtemplate->Set(
            v8::String::New(scriptname), 
            v8::FunctionTemplate::New(
            V8ScriptClass<C>::RelayCallback<C, Rtype, Ptype1, FuncPtr>
                ));
    };

template<typename Rtype, typename Ptype1, Rtype (*FuncPtr)(Ptype1 param1)>
static v8::Handle<v8::Value> RelayCallback(const v8::Arguments& args)
{
    std::cerr<<__FUNCTION__<<std::endl;
    v8::HandleScope handle_scope;
    return handle_scope.Close(toJSType( ((FuncPtr)(toCType(args[0]))) ));
};

在我看来,typedef 和实际函数签名是相同的。

编辑:忘记了一个声明:

class EXPORT FunctionTemplate : public Template {
 public:
  /** Creates a function template.*/
  static Local<FunctionTemplate> New(
      InvocationCallback callback = 0,
      Handle<Value> data = Handle<Value>(),
      Handle<Signature> signature = Handle<Signature>());

最佳答案

我发现了错误。 RelayCallback 模板将静态函数指针作为参数,我尝试用成员函数指针实例化它。我只需要将它更改为成员函数指针模板参数。

关于c++ - 无法转换函数指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706908/

相关文章:

c++ - 类模板SFINAE

c++ - 解释这个 C++ 函数如何返回一个数组

c++ - 我可以只对一个模板使用 `-fno-implicit-templates` 功能吗?

c++ - std::function 到成员函数

C++:我使用什么类型来定义这个映射?

java - 互斥锁与彼得森算法?

c++ - Windows/C++ - 从 SDL_SetWindowIcon 的第三方 exe 加载图标 - 崩溃

c++ - 使用双键高效缓存整数

c++ - 为什么在我没有传递类的实例时调用复制构造函数?

c++ - 使编译在模板类的特定实例化时失败