【发布时间】:2017-12-13 23:20:32
【问题描述】:
有没有办法使用 Base 类对象指针将模板类实例类型别名 (ClassTmplt/DerivedFloat::InternalType) 传递给外部非成员模板函数 (DoSomething)(就像在最后两个 test() 函数注释行中一样) ?
class Base
{
};
template <typename T>
class ClassTmplt:
public Base
{
public:
using InternalType = T;
};
class DerivedFloat:
public ClassTmplt<float>
{
};
template <typename T, typename TIn>
void DoSomething(const TIn value)
{
T val = T(value);
std::cout << val << " | " << typeid(val).name() << " | " << typeid(value).name() << std::endl;
}
template <typename T>
typename T::InternalType PassInternalType(T* obj)
{
return T::InternalType;
//return obj::InternalType
}
void test()
{
Base* obj = new DerivedFloat;
DoSomething<float>(1.23);
DoSomething<DerivedFloat::InternalType>(1UL);
//DoSomething<(*obj)::InternalType>(-123);
//DoSomething<PassInternalType(obj)>(4.56);
}
【问题讨论】: