mardi 22 décembre 2015

C++, How does the caller know what type to pass when using 'Perfect Forwarding'

I heard about 'Perfect Forwarding' recently (from Scott Meyers 'Effective modern c++') like,

Case 1. Not using Perfect Forward

class Widget {
public:
    void setName(const std::string& newName) { name = newName; }
    void setName(std::string&& newName) { name = std::move(newName); }
...

Case 2. Using Perfect Forward

class Widget {
public:
    template<typename T>
    void setName(T&& newName) { name = std::forward<T>(newName); }
...

So now, I know lots of advantage of using perfect forwarding. but in case1, user could know parameter type of setName is 'std::string'. however, can't in case 2. so my questions are

  1. When using perfect forwarding, How user knows real parameter type?
  2. Do I have to use this pattern despite this disvantage?

thank you. (sorry for my poor english skill)

Aucun commentaire:

Enregistrer un commentaire