Действие и Func с lambda:
person p = new person();
Action<int, int> mydel = p.add; /*(int a, int b) => { Console.WriteLine(a + b); };*/
Func<string, string> mydel1 = p.conc; /*(string s) => { return "hello" + s; };*/
mydel(2, 3);
string s1= mydel1(" Akhil");
Console.WriteLine(s1);
Console.ReadLine();
x
скрыт во время наследования. Вы можете показывать через:
template <typename T>
class derived : public base<T> {
public:
using base<T>::x; // added "using" statement
int f() { return x; }
};
(Исходный ответ от 10 января 2011 г.)
Я думаю, что нашел ответ: Проблема GCC: использование члена базового класса, который зависит от аргумент шаблона . Ответ не определен для gcc.
Обновление: в ответ на комментарий mmichael из проекта N3337 стандарта C ++ 11:
14.6.2 Зависимые имена [temp.dep] [...] 3 В определении шаблона класса или класса, если базовый класс зависит от параметра-шаблона, область базового класса не рассматривается во время неквалифицированных поиск имени в точке определения шаблона или члена класса или во время создания шаблона или члена класса.
blockquote>Является ли «потому что стандарт говорит так» считается ответом, я не знаю. Теперь мы можем спросить, почему стандарт указывает, что, как замечательный ответ Стив Джессоп и другие, ответ на этот последний вопрос довольно длинный и спорный. К сожалению, когда дело доходит до стандарта C ++, часто почти невозможно дать краткое и самодостаточное объяснение того, почему стандарт требует чего-то; это относится и к последнему вопросу.