想象我有一個模板函數是這樣的:C++ - typedef「內部」模板參數?
template<typename Iterator>
void myfunc(Iterator a, typename Iterator::value_type b)
{ ... }
是否有實現相同的事情由申報迭代一個typedef ::值類型,我可以在函數簽名使用的方法嗎?舉例來說,我寧願能夠做這樣的事情:
template<
typename Iterator,
typedef Iterator::value_type type>
void myfunc(Iterator a, type b)
{ ... }
到目前爲止,我已經使出使用默認模板參數和Boost概念檢查,以確保默認總是使用:
template<
typename Iterator,
typename type = typename Iterator::value_type >
void myfunc(Iterator a, type b)
{
BOOST_STATIC_ASSERT((
boost::is_same<
typename Iterator::value_type,
type
>::value
));
...
}
......但如果在這種類型的東西的語言支持,這將是很好的。
編輯
我也許應該使用一個類,而不是一個功能,因爲默認參數是不是功能標準。
template<
typename T,
typename V = typename T::value_type>
class A : public B<T, V>
{
BOOST_STATIC_ASSERT((boost::is_same<typename T::value_Type, V>::type));
};
備註:函數模板上的默認模板參數是擴展名。他們不在C++ 03中。 – 2010-03-29 07:20:54
我固定了你的另一個省略typename的地方。希望你不介意。 – 2010-03-29 07:21:49