可能重複:
Can the template parameters of a constructor be explicitly specified?模板的構造函數的怪事
我以前question跟進,(我發現這個情況,編輯2)
特出簡單的代碼:
#include <iostream>
struct Printer
{
Printer() { std::cout << "secret code" << std::endl; }
};
template <class A>
struct Class
{
template <class B, class C>
Class(B arg)
{
C c; /* the 'secret code' should come from here */
std::cout << arg << std::endl;
}
Class(double arg) { std::cout << "double" << std::endl; }
Class(float arg) { std::cout << "float" << std::endl; }
/* this forbids the use of printer in the first parameter */
Class(Printer printer) { throw std::exception(); /* here be dragons */ }
};
int main()
{
Class<int> c(1.0f);
Class<int>* ptr = new Class<int>((double)2.0f);
return 0;
}
// Can anyone print 'secret code' while creating an object of type 'Class' ?
詳細說明:對於模板構造函數,您可以在對象被實例化時指定一個不屬於構造函數參數一部分的模板參數嗎?
我認爲這是值得一個問題。
這樣的事情的語法必須看起來像'類 objectA (initB);',我不認爲這是允許的(我會讓別人引用章節和詩句,我不會沒有標準記憶)。至少,如果可能的話,你可能必須聲明模板構造函數爲'explicit',因爲當隱式構造一個臨時變量時無法確定'C'。真正的問題是:爲什麼你需要做這樣的事情,特質課是否會解決你的問題,如果不是,爲什麼不呢? – 2011-06-15 14:07:33
目前它只是一個編程好奇心 – 2011-06-15 14:10:55