0
Test::load
應該將數據(通過名稱或索引描述)加載到傳遞的引用中。作爲第三個參數,加載失敗時會有一個默認值(數據從文件加載)。新構造的對象作爲默認模板函數參數
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
。 當我想使用默認構造類型作爲從ValueType推導出的默認第三個參數(在const char *
版本中)時發生問題。
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);
}
哦,我知道,我總是忘記它,因爲它寫的感覺很「自然」......而這次的錯誤信息是對我的暗示......非常感謝! – relaxxx
*對我來說不是一個提示 – relaxxx