3

私がやろうとしているのは、ジェネリック関数ポインターと実際の型にキャストする方法に関する情報を格納するテンプレート関数を作成することです。これは、私のスクリプト バインディング API で使用され、ゲーム エンジン用に Python から C++ 関数呼び出しを行います。これを LLVM で XCode4 を使用して OSX に移植する過程で、エラーが発生しました。このサンプル コードは Visual Studio 2012 で正常にコンパイルおよび実行されますが、LLVM で「'Call' の呼び出しに一致する関数がありません」というエラーが表示されます。

#include <iostream>

void testfun (int i)
{
  std::cout << "Hello World " << i << std::endl;
}

typedef void BasicFunction ();

template <BasicFunction* fn, typename T0>
void Call (void(*f)(T0), T0 i)
{
  reinterpret_cast<decltype(f)>(fn)(i);
}

int main(int argc, const char * argv[])
{
  Call<reinterpret_cast<BasicFunction*>(testfun)>(testfun, 5);
  return 0;
}

これは非標準コードですか?LLVM のバグ?または、同じタスクを達成するためのより良い方法はありますか? 注: 関数情報を自動的に推定できるように、関数ポインターはテンプレート内で最初に来る必要があります。

4

1 に答える 1