2016-06-13 6 views
0

をオーバーロードは、私はこの方法fooの複数の実装を持つクラスbarを持っていると仮定しますか?つまり、すべての関数のパラメータの型を取得する

template<typename... types> class list {}; 

と定義し、list<list<int, int>, list<float, bool>, list<const vector<void*>&>>を取得したいとします。

+1

ああ、神話の 'invocation_traits'提案... –

+0

@KerrekSBはあまり聞こえません... –

+0

あなたはどのようなインターフェースを期待していますか? 'bar'を提供して' list'を取得するだけですか?まあ、.... – Arunmu

答えて

2

あなたは "私は引数int, longbar.foo呼び出すことができますか?" の質問をすることができます。 「void (Bar::*)(int, int)タイプの&Bar::fooメソッドがありますか?」という質問をすることはできますが、いずれの要件とも一致しません。あなたが行うことができます

もう一つは、bar.fooに前方完璧で、故障ではありません、その実装の中に、転送インターフェイスで失敗に結果を転送するようにもSFINAEのテストを行います。

有限の種類のリストとmax arg countがある場合、O(T^N)コストで動作するもの、または正確なシグネチャの一致のためにオーバーロードのセットを徹底的に検索できます。

あなたの質問には、通常、このタイプの質問があります。ここでは、特定の技術的課題を説明し、この課題が解決しようとしている問題を簡単に説明することはできません。実際には、「関数シグネチャのオーバーロード」の質問をどのように信頼できるようにするのかということは衝撃的です。多くの多くのこのような問題には、完全な反射が解決する必要がないという解決策があります。

+0

はい、ありがとうございます、私は今私の特定の問題について質問をすることを検討します。しかし、コインのもう一つの側面があります。私の特別な問題は、SO(私はタイトルが足りないこともありえません)を求めることにあまりにも専門的であり、 "私のコードを書いてください" –

+0

@TigranSaluev私はあなたがあなたが効率的にやろうとしていることをしようとしている理由について、あまりにも漠然とした説明とあなたのフィートへの道に沿ってあなたをブロックしているものを説明するのが最も良いと思います。 – Yakk