私はマクロ(FOO(name))といくつかのテンプレートクラスBar Bar>を持っているとします。別の名前のFOOを呼び出すたびに、私はBarの別のインスタンスを取得したいと思います。 Bar <>テンプレートは実際に内部で名前を取得する必要はありませんが、異なる名前でBar <のインスタンスが異なることを確認する必要があります。同じ名前(異なる翻訳単位でも)を使用するテンプレートは常にBar <>の同じインスタンスになります。彼らは外部リンケージを持っていないので、その文字リテラルはテンプレートパラメータとして渡すことはできませんを除いて、#defineのテキストがあれば、何とかテンプレートに渡すことができますか?
template<const char* x>
class Bar
{
//... stuff
};
#define FOO(name) Bar<#name>
これは動作します:だからここラフ初の試みです。プリプロセッサに "name"という一貫性のあるハッシュがあるとしたら、int(テンプレートに渡すことができます)は動作しますが、それを行う方法はありません。
アイデア?
あなたは正確に何をしようとしていますか? – GManNickG
C++言語の愚かな乱用) これはすぐに公開されるオープンソースライブラリの一部になるだろう。一度見ることができるようになるとここでコメントするだろう;) –
これはバージョン1.2のオープンソースToastライブラリのTOAST_STATIC_INIT_PROTECTEDの実装。ドキュメントへのリンク: http://toast.sourceforge.net/group__miscgroup.html#gdb5e38486385cb4eb10848f0d573fe24 –