Have a template parameter that can be pointer type or non-pointer type

后端 未结 3 1182
北海茫月
北海茫月 2021-01-17 16:38

Suppose I have something like:

template 
void do_something(T t){
  pass_it_somewhere(t);
  t->do_something();
}

Now it wo

3条回答
  •  梦谈多话
    2021-01-17 17:07

    Soultion 1

    Use template specialization:

    template 
    void do_something(T t){
      pass_it_somewhere(t);
      t.do_something();
    }
    
    template 
    void do_something(T* t){
      pass_it_somewhere(t);    
      t->do_something();
    }
    

    Solution 2

    Add a user-defined pointer operator in class T:

    class A
    {
    public:
        void do_something() const {}        
        const A* operator->() const { return this; }
    };
    
    template 
    void do_something(T t){
      pass_it_somewhere(t);      
      t->do_something();
    }
    

提交回复
热议问题