Test::load
渡された参照にデータ(名前またはインデックスのいずれかで記述)をロードする必要があります。3番目のパラメーターとして、ロードが失敗した場合のデフォルト値があります(データはファイルからロードされます)。
struct Test
{
template <typename ValueType, typename DefaultValueType>
void load(const char * c, ValueType & a, DefaultValueType b)
{
std::cout << "1";
}
template <typename ValueType, typename DefaultValueType>
void load(int i, ValueType & a, DefaultValueType b)
{
std::cout << "2";
}
};
ValueType
文字列とカスタムタイプが特に必要なDefaultValueType
ため、両方が必要です。const char *
ValueTypeから推定されるデフォルトの3番目の引数(バージョン内)としてデフォルトの構築型を使用したい場合に問題が発生します。
template <typename ValueType, typename DefaultValueType>
void load(const char * c, ValueType & a, DefaultValueType b = ValueType())
{
std::cout << "1";
}
エラーが発生しexpects 3 arguments
ます(vs2010)。
なぜそれが機能しないのですか?私はこの仕事をするためにworkaroudをする必要があります。
誰かが遊んでみたいと思っているなら、ここに完全な「動作する」コードがあります
#include <iostream>
struct Test
{
template <typename ValueType, typename DefaultValueType>
void load(const char * c, ValueType & a, DefaultValueType b/* = ValueType()*/)
{
std::cout << "1";
}
template <typename ValueType, typename DefaultValueType>
void load(int i, ValueType & a, DefaultValueType b)
{
std::cout << "2";
}
//Workaround
template<typename ValueType>
void load(const char * c, ValueType & v)
{
load(c,v,ValueType());
}
};
int main()
{
Test t;
float f;
//This is standard behavior
t.load("bar", f, 0.0f);
//I want this to be possible call
t.load("bar", f);
}