有两种结构:
template <typename T>
struct AB
{
T a, b;
AB <T> ( ) : a ( 0.0 ), b ( 0.0 ) {}
};
template <typename T>
struct ABList
{
typedef std::list < AB <T> > Type;
typedef T Type2;
};
和一个函数
template <typename List>
void test ( List l )
{
List::iterator i_l = l.begin();
//Here *i_l type is needed instead of double
double val = (*il).a;
}
有没有办法获得 *i_l 模板化类型(这里是双精度),即
std::list::Item type
如果不传递任何其他参数
int main(int argc, char* argv[])
{
ABList <double> ::Type intervals;
test (intervals);
return 0;
}
感谢您的帮助,首选 C++ 03。
更新的问题
如果是模板化类型
std::list::Item type
表示test()的一个形参,这个解决方案
template <typename List>
void test ( List l, typename List::value_type::value_type val )
{
...
}
int main(int argc, char* argv[])
{
ABList <double> ::Type intervals;
double x = 7.0;
test <ABList<double>> (intervals, x);
return 0;
}
不起作用...出现以下错误:
error C2770: invalid explicit template argument(s)
版本
test (intervals, x);
导致另一个错误:
Failed to specialize function template 'void test(List,List::value_type::{ctor})'