数据类型调用模板方法

时间:2014-09-24 16:11:50

标签: c++ templates types

如何使用不同的数据类型而不需要为每种类型编写一行代码?

假设是否存在采用任何数据类型的模板方法。 我想传递各种数据类型(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。 我想测试一个矢量,矢量,矢量等等

3 个答案:

答案 0 :(得分:1)

您可以使用可变参数模板循环

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*>();

答案 1 :(得分:0)

由于您的问题过于宽泛,很难理解您的真实要求。我建议调查一下boost::variant,特别是模式&#39;访客&#39;在那里实施。这并不意味着您必须使用这个库,但这可能是如何实现此类逻辑的良好开端。其他候选人将是std::tupleboost::any

答案 2 :(得分:0)

听起来像模板元编程的情况。 看看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() );
}