2016-09-29 2 views
1

шаблона класса Учитывая шаблон класса:Возвращение класса реф из функции

template <typename T> 
class my_class 
{ 
public: 
    my_class& test1() { return *this; } 
    // OR 
    my_class<T>& test2() { return *this; } 
} 

Есть ли разница между типами возвращаемых test1 и test2?

+3

Нет, нет никакой разницы – wasthishelpful

+3

No. (картофель) –

ответ

7

Есть ли разница между типами возврата test1 и test2?

№ Существует концепция, называемая injected-class-name. Внутри корпуса my_class<T> имя my_class относится к полному типу my_class<T>.

Мы можем даже принять это к своему логическому завершению, и добавить:

my_class::my_class::my_class::my_class& test4() { return *this; } 
+3

нуждается больше 'my_class'. –

+1

Введенное имя класса ведет себя по-разному в C++ 03 и C++ 11, можете ли вы добавить это? – Trevir

+1

@Trevir Я не знаю изменений в C++ 11. – Barry

2

Нет, в пределах объема my_class<T>, my_class является аббревиатурой от my_class<T>.

Смежные вопросы