下面是一個有缺陷的(和簡化的)模板函數,希望能夠在可以轉換爲預定義數量的類型之一的模板arg上工作。獲取C++編譯器以揭示什麼類型可以轉換爲
它恰好是2種類型,但它更冷。
void do_something_type_specific(const int &unused) { std::cout << 'i'; }
void do_something_type_specific(const std::string &unused) { std::cout << 's'; }
template< typename Iterator >
void perform_work_on_a_range(Iterator begin, Iterator end)
{
do_something_type_specific(*begin);
// Perhaps more code...
}
這發生在我的環境中產生所需的結果。 模板實例將成功編譯iff *Iterator
產生可轉換爲其中一個選項的類型。
但是,該代碼不必要求執行轉換,並且儘管unused
未被使用,但當begin == end
仍然存在UB。
如何在C++ 03中實現這種行爲而沒有這些問題?
我認爲這很可能與SFINAE完成。 – 2013-03-06 16:49:57
據我所知,C++ 03只提供了一個「簡單」的運行時,在那裏沒有辦法看到一個類型可以轉換成什麼。它是一種靜態語言,除了一點運行時多態。 – 2013-03-06 16:50:40
@ bash.d什麼類型可以轉換爲靜態信息(請記住,C++是一種靜態語言!)。我不明白爲什麼運行時會參與其中。 – 2013-03-06 16:51:55