如果兩個對象的模板參數在運行時相同,是否有任何方法可以從給定對象構造一個新對象?例如:C++模板類和複製構造
我與聲明中的模板類:
template<typename _Type1, typename _Type2> class Object;
接下來,我有模板的兩個示例:
template class Object<char, int>;
template class Object<wchar_t, wint_t>;
現在,我想編寫一個成員函數,作爲:
template<typename _Type1, typename _Type2>
Object<char, int> Object<_Type1, _Type2>::toCharObject() {
if(__gnu_cxx::__are_same<_Type1, char>::__value)
return *this;
else {
//Perform some kind of conversion and return an Object<char, int>
}
}
我已經嘗試了一些技術,如使用__gnu_cxx::__enable_if<__gnu_cxx::__are_same<_Type1, char>::__value, _Type1>::__type
在一個拷貝構造函數爲Oject
類,但我一直運行到錯誤:
error: conversion from ‘Object<wchar_t, wint_t>’ to non-scalar type ‘Object<char, int>’ requested
有沒有辦法,我能做到這一點?任何幫助將不勝感激!
您的模板類型名稱無效。下劃線後跟大寫字母標識符**保留供實施**使用。它們可能與編譯器或標準庫定義的名稱衝突。 – jalf 2010-04-04 16:06:55
@jaif:別擔心類型名稱。例如,我只是隨便挑選它們。我所有的代碼實際上都是在不同的命名空間中定義的,所以應該沒有衝突。 – themoondothshine 2010-04-04 16:09:45
命名空間不是問題的名稱 - 像_Type1在所有情況下都是保留的(例如,它們可能是宏),在這種情況下,不太可能被實現使用。還是你說你發佈的內容不是導致你的問題的真正代碼?那麼,不要那樣做。 – 2010-04-04 16:15:10