とテンプレート関数をラップ:は、私がboost.pythonを使ってPythonにC++関数以下を公開しようとしているboost.python
template <typename genType>
genType refract(
genType const & I,
genType const & N,
typename genType::value_type const & eta);
とどのような私が得たことはこれです:
template<typename N>
N reflect(N const & i, N const & n, typename N::value_type const & eta)
{
return glm::N refract(i,n,eta);
}
BOOST_PYTHON_MODULE(foo)
{
def("reflect", reflect<float>);
def("reflect", reflect<double>);
}
と
エラーC2780:「無効ブースト::のpython ::デフ(のconst char型*、F、constのA1 &、constのA2 &、constのA3をコンパイルするとき、私は次のエラーを持っています) ':5つの引数が必要です - 2が提供されます
どうすればよいですか?
-----編集------
これは動作します:
template<class T>
T floor(T x)
{
return glm::core::function::common::floor(x);
}
BOOST_PYTHON_MODULE(busta)
{
def("floor", floor<double>);
def("floor", floor<float>);
}
を参照から、floor()
定義はfolowingです:
template< typename genType >
genType floor (genType const &x)
私が構築することができますこれはDLLとして、それをPythonでインポートし、そこからfloor()を使用します。人生はとてもいい感じ...しかし...
これは動作しません、と私は理由を理解したいと思います:
template<class genType >
genType reflect (genType i, genType n, genType eta)
{
return glm::core::function::geometric::refract(i, n,eta);
}
BOOST_PYTHON_MODULE(busta)
{
def("reflect", reflect<float>);
}
レフラクト()の定義は、この記事の一番上にあります。
私は今取得エラーはこれです:
1>foo.cpp(37): error C2893: Failed to specialize function template 'genType glm::core::function::geometric::refract(const genType &,const genType &,const genType::value_type &)'
1> With the following template arguments:
1> 'float'
1> foo.cpp(60) : see reference to function template instantiation 'genType
`anonymous-namespace'::reflect<float>(genType,genType,genType)' being compiled
1> with
1> [
1> genType=float
1> ]
1>
1>Build FAILED.
最初に、浮動小数点型に型定義された名前の「value_type」があるとしたらどうですか? –
@Darkこれは確かに問題でしたが、これが唯一の問題だと思いますか? –
私は分かりません。私はこの機能が何をしようとしているのか理解していません。これまで行ってきたことは、 'value_type'の問題をテンプレートの1つ上のレベルにさらに移動させました。 'genType 'が何であれ、それは浮動または二重にすることはできません。ネストされた型名 'value_type'を持つ必要があります。通常これは 'genType'が標準C++のコンテナまたはイテレータでなければならないことを意味します。 –