检查int或list <int>

cow*_*boy 6 c++

任何人都可以让我知道实现这一目标的最佳方法.

说,我有一个模板功能

template<typename ARGUMENT>
void get_result(ARGUMENT &ag)
{

// arg can be a single object of a particular object or list of objects of that particular class. 
//rest

}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以检查&ag是单个对象还是对象列表.此外,使用给定的模板界面.

如果答案是通过类接口以某种方式通过模板规范并不重要.唯一的问题是我不想指定对象类型或列表类型.

防爆.ag = int或ag = list

CB

jro*_*rok 7

嗯,也许你需要的只是简单的重载?

template<typename ARGUMENT>
void get_result(ARGUMENT& ag);

template<typename ARGUMENT>
void get_result(std::list<ARGUMENT>& ag);
Run Code Online (Sandbox Code Playgroud)

编辑:

阅读你的评论,我有一种感觉,你正试图过度设计你的功能,并承担很多责任.

我认为你最好只用第一次过载.每当您需要将该功能应用于整个范围时,请使用for_each.


doc*_*ove 2

您可以使用某些类型特征来消除歧义:

#include <type_traits>

template<typename T>
T get_result(T arg) 
{ 
    return detail::get_result(arg, typename std::is_arithmetic<T>::type() ); 
}

namespace detail {
    template<typename T>
    T get_result(T arg, std::false_type /* dummy */) { }

    template<typename T>
    T get_result(T arg, std::true_type /* dummy */) {}
}
Run Code Online (Sandbox Code Playgroud)

看到这里
这个特征显然只是提取数字类型,而不是容器。返回类型需要一些工作。这里这里的答案中有检测容器类型的想法