template parameter-übergabe
-
wenn ich sowas habe :
template <class T> class BeispielContainer { void addItem(const t& item) // per reference to const { m_cont.add(item); } };dann stehe ich irgendwie vor dem dilemma, das es bei integralen typen langsamer
werden kann, weil man die nicht als reference übergeben sollte,
aber ich grosse Objekte auch nicht per-value übergeben kann // möchtegibts dafür eine eine Lösung?
-
Spielt Dir das wirklich eine Rolle wegen der Performance?
-
obwohl es schon eine rolle spielt,
ist es wohl eher interesse-halberdarf zB der Compiler sowas nach "per-value" optimieren,
so weit ich das überblicke gibt es keine semantischen
unterschiede zwischen "per-value" und "per reference to const"
(jedenfalls bei der parameter-übergabe)oder mir fehlt da der weitblick
-
const_cast?
-
verwende type_traits und partielle spezialisierung oder SFINAE.
//SFINAE mit boost #include <boost/utility/enable_if.hpp> #include <boost/type_traits/is_fundamental.hpp> template <class T> void do_sth (T t , typename boost::enable_if<boost::is_fundamental<T> >::type* = 0) { } template <class T> void do_sth (T const &t, typename boost::disable_if<boost::is_fundamental<T> >::type* = 0) { } //partielle spezialisierung mit TR1 #include <tr1/type_traits> template <class T, bool fund = std::tr1::is_fundamental<T>::value> struct Foo; template <class T> struct Foo<T, true> { void out (T t); }; template <class T> struct Foo<T, false> { void out (T const& t); };/edit: es gibt noch eine möglichkeit, aber das überlasse ich jemand anderem.
-
Der Compiler darf Optimieren was er möchte.
Das Programm muss nur das erwartete Verhalten zeigen.