親クラスの関数をC#で表示する方法を考え出すのは苦労しました。私がしようとすると、C++/CLI:テンプレートクラスから継承した関数はC#で表示されません
public ref class Vector3fP : public FixedNP<3, float>
{
}
:
は、その後、私はFixedNPテンプレートから継承したクラスをしました
template <int Dim, typename Type>
public ref class FixedNP
{
public:
float foo() {return 1;};
};
)私は、関数fooを定義するテンプレートクラスを、(きたと仮定しますC#からfoo()関数を呼び出します。
Vector3fP bar = new Vector3fP();
bar.foo();
関数Vector3fPにはfooの定義が含まれていないと表示されます。
foo()の定義をVector3fPクラスに移動すると、正常に動作します。しかし、これは実際のコードでは実行可能ではありません.FinalNPテンプレートには、およそ4つの異なるクラスから継承されるべき多くの関数が含まれているためです。
は、インターネット上のいくつかの検索後、私はVector3fPに
using FixedNP<3, float>::foo;
を追加すると、誰かのために同様の問題が修正されていることが分かりました。しかし、私の場合にはそれだけで、別のエラーでC++/CLIのコードをコンパイル今回の結果:
エラーC3182:「Vector3fP」:メンバーusing宣言やアクセス宣言は、マネージ型
内違法です
私の機能をC#で見えるようにするにはどうすればよいですか?
テンプレートに外部リンケージがありません。 C++ではなく、C++/CLIでもありません。 * generic *キーワードを使用する必要があります。 'int dim'は飛ばないでしょう。 http://msdn.microsoft.com/en-us/library/8z2kbc1y.aspx –
私はそれを知っています。それがテンプレートから「通常の」クラスを継承する理由の1つです。 – stativ
また、私はここでジェネリックスを望んでいないと確信しています。まずコンパイル時にこれを実行したい、次に私は実際にパラメータをintにする必要があります。これは後でテンプレートパラメータとして使用するためです。 –
stativ