[英]Data type calling template method
如何使用不同的数据类型,而无需为每种类型编写一行代码?
假设是否有采用任何数据类型的模板方法。 而且我想传入各种数据类型(int,double,string,char等),而不为每种数据类型创建一行。 有没有一种有效的方法来遍历不同的数据类型并为每种数据类型调用模板方法?
样例代码:
template <typename T>
sorted_vector<T>::sorted_vector( sorted_vector<value_type> const& rhs )
: beg_( new value_type [rhs.size()] )
, end_( beg_ + rhs.size() )
, cap_( end_ )
{
std::copy( rhs.beg_, rhs.end_, beg_ );
}
因此,我的任务是使用错误测试模板,但想检查所有value_types。 我想测试向量,向量,向量等
您可以使用可变参数模板循环 :
class Test
{
public:
template <typename T>
static void f()
{
// Your generic code to execute
std::cout << typeid(T).name() << std::endl;
}
};
template<typename F, typename ... Ts>
void Call()
{
std::initializer_list<int>({ (F::template f<Ts>(), 0)... });
}
然后这样称呼:
Call<Test, int, char, char*>();
但是我不确定它是否比
// Equivalent to
Test::f<int>();
Test::f<char>();
Test::f<char*>();
由于您的问题过于笼统,很难理解您真正在问什么。 我建议研究boost::variant
,尤其是在那里实现模式“ visitor”的方式。 这并不意味着您必须完全使用此库,但这可能是实现此类逻辑的一个很好的起点。 其他候选人将是std::tuple
和boost::any
听起来像是模板元编程的情况。 看看Boost的MPL的的foreach: 的foreach
他们的示例做了您尝试做的事情:调用函子以获取列表的不同类型和值。
struct value_printer
{
template< typename U > void operator()(U x)
{
std::cout << x << 'n';
}
};
int main()
{
for_each< range_c<int,0,10> >( value_printer() );
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.