数据类型调用模板方法
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
,特别是"访问者"模式是如何在那里实现的。这并不意味着你必须使用这个库,但这可能是一个很好的起点,如何实现这样的逻辑。其他候选者是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() );
}
相关文章:
- C++11:模板方法的模板函数调用无法编译?
- 基于枚举参数调用专用模板方法
- 从非模板类调用专用模板方法
- 从部分专用模板方法调用模板非静态方法
- 模板方法在C++中相互调用
- 调用模板方法会导致'operator<'不匹配
- 如何让一个C++模板类调用另一个类的方法?
- 从专用模板方法调用无专门化的模板方法
- P/调用<T> C# 中的模板方法C++
- 从另一个模板对象调用模板方法时出现奇怪的编译行为
- C++调用派生类中基序列的模板方法
- 当类型未知时调用模板方法
- 在模板类中调用模板方法
- C++多态性模板类:调用基类方法而不是派生类
- 从基非模板类调用派生模板类方法
- 如何使用模板参数选择方法调用
- "Unable to resolve template based identifier X" - 从模板类调用模板参数类的方法 (C++)
- 在模板中调用对象的方法
- C++代码与模板方法调用混淆
- 从C++中的另一个模板方法调用模板方法