我有一个看似简单的问题,我不知道如何解决。模板重载(参考和非参考版本)
想象一下下面的模板方法
template<typename T> void Add(T& var);
,其中特可以添加东西的容器(排序)。我可以通过POD
或更复杂的类型,如strings
,这就是为什么我通过T作为参考。
这样做的问题是,每当我想打电话给加入(...)用像另一个方法的结果:
Add(MethodThatReturnsAnInt());
这将无法正常工作和临时变量是需要保持结果MethodThatReturnsAnInt()
。
是否有任何方式重载Add
,以便我可以有一个引用传递和非引用传递版本?
template<typename T> void Add(T& var);
template<typename T> void Add(T var);
会std::enable_if
在这种情况下有什么用?
阅读并了解[右值引用](http://en.cppreference.com/w/cpp/language/reference)。 –
Google _forwarding reference_。你的情况和由此产生的问题非常普遍,他们添加了一个语言功能。 ;-)这是C++ 11的一个基本特性,可能已经足够的时间了。 –
你真的想解决什么问题? Add()有什么作用? – Barry