注: この質問は tinyxml に大まかに関連しているだけですが、そのような詳細を含めると、概念をよりよく説明するのに役立つ場合があります。
親 XML ノードの子を反復処理し、子要素の値を取得して、その子要素の値をベクターにプッシュする関数テンプレートを作成しました。
「値を取得する」部分も関数テンプレートとして記述されています。
すなわち
template <typename Type>
Type getXmlCollectionItem(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
std::string やその他のカスタム オブジェクトなど、さまざまなタイプの子要素の値を返すために、検索部分の特殊化があります。
すなわち
template <>
std::string getXmlCollectionItem<std::string>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
template <>
MyObject getXmlCollectionItem<MyObject>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
これはすべて完全にうまく機能しますが、tinyxml ファイルを扱うときに共有関数ライブラリにあると非常に便利だと思いました。
質問:namespace UtilityFunctions
のような特定のオブジェクト型の知識を持たない1 つの名前空間で関数テンプレートを宣言し、特定のオブジェクト型'MyObject'
の知識を持つ他の名前空間でその関数テンプレートの特殊化を宣言および定義することは可能ですか?のような'MyObject'
?
私の推測では、それは不可能ですが、共通の関数テンプレートを持つという概念は、私が探している機能に近づく別の方法があるのに十分役立つように思えます...
用語の誤りや説明が不明確な場合はお詫び申し上げます。私はこのトピックについて多くの調査を行いましたが (同じ名前空間内で関数テンプレートの特殊化を機能させるため)、まだ決定的な答えは見つかりませんでした。