爲了測試並顯示我的函數庫的一些函數的結果,我創建了一組方便的函數。重載全局類型轉換運算符
我有一個execute
功能,看起來像:
template <typename R, typename I>
std::string execute(const std::string& func_name, R(*func_ptr)(const I&), const I& func_input);
它調用的函數,並顯示在一個格式化字符串,我可以向std::cout
結果和參數。
問題是,我的一些功能不返回可轉換爲字符串結果。我以爲我可以簡單的東西,如超載全球::operator std::string
:
template <typename T>
operator std::string(const std::vector<T>& v);
但是GCC抱怨:
error: 'operator std::string(const std::vector<T, std::allocator<_CharT> >&)' must be a nonstatic member function
嘛,當然問題是,我不能成員運營商加入到std::vector
,連服我的班級,我不想污染他們「測試」轉換運營商。
我想我可以添加一個間接層並使用函數而不是轉換操作符,但那不是更美觀的解決方案。我也可以爲std::ostream
重載::operator <<
並使用std::ostringstream
,但這也不是最乾淨的解決方案。
我想知道全局轉換運算符是否真的不可重載,如果有,爲什麼。
但是許多運營商都可以作爲全局或成員,何樂不爲呢?例如,如果有一個全局和成員操作符<<,編譯器會抱怨模糊的調用,它可能會對convertions做同樣的事情。 – NewbiZ 2010-02-10 08:12:38
轉換函數是特殊的成員函數(因爲是構造函數,析構函數,OP =和拷貝構造),因爲它們參與轉化/對象創建。見12.3。 – dirkgently 2010-02-10 08:17:23