メンバー テンプレート関数を持つクラスがあります。
// writer.h
class Writer {
public:
...
template <typename T, typename V>
void addField(const std::string& name, V v)
{
// write something
}
};
そして、Writer のソース ファイルに、次の明示的な特殊化を追加しましたsome_type
。
// writer.cpp
template <>
void Writer::addField<some_type, int>(const std::string& name, int v)
{
// specific some_type writing logic
}
これは機能します...時々。正しいタイプであることを確実に確認したとしても:
writer.addField<some_type>("name", static_cast<int>(some_value));
明示的な特殊化が呼び出されることもあれば、プライマリが呼び出されることもあります。何を与える?