любая причина синтаксиса общего указателя с пользовательским классом с шаблоном, как показано ниже - PullRequest
0 голосов
/ 22 сентября 2019

В настоящее время я вижу некоторый код c ++ 11 в проекте, где меня немного смущает какой-то прикольный синтаксис.

ниже приведен код

std::shared_ptr<CommonAPI::Runtime> runtime_AMB = CommonAPI::Runtime::get();
std::shared_ptr<v1::org::table::psa::EthernetProxy<>> amb_consumer ;
amb_consumer = runtime_AMB->buildProxy<v1::org::table::psa::EthernetProxy>();

Здесь мое сомнениеФункция buildProxy, ее можно просто вызвать, почему ее упоминание, например,

buildProxy<v1::org::table::psa::EthernetProxy>() вместо buildProxy()

Еще одно сомнение в том, что shared_ptr<v1::org::table::psa::EthernetProxy<>> здесь, почему EthernetProxy<> вместо того, как v1::org::table::psa::EthernetProxy

Может быть, это легко, но я не знаю, что такое C ++ 11

1 Ответ

2 голосов
/ 22 сентября 2019

Ответ на первый вопрос

Скажем, у вас есть:

struct Foo
{
    template <typeename T>
    T bar() { return T{}; }

    template <typeename T>
    T baz(T t) { return 2*t; }
};

Чтобы использовать Foo::bar, вам необходимо предоставить параметр шаблона.

Foo foo;
foo.bar<int>(); // OK.
foo.bar();      // Not OK.

Если параметр шаблона может быть выведен из аргументов, то вам не нужно явно указывать параметр шаблона.

foo.baz<int>(10); // OK. Template parameter is explicity.
foo.bar(10);      // Also OK. Template parameter is deduced to be int

Ответ на второй вопрос

EthernetProxy представляется следующимшаблон класса с параметром шаблона по умолчанию.Скажем, у вас есть:

template <typename T = int> struct EthernetProxy { ... };

EthernetProxy это не класс, это шаблон класса.Установкой шаблона класса будет класс.

EthernetProxy<double> var1; // OK
EthernetProxy<> var2;       // Also OK. The default template parameter int is used.

Вот почему вы можете использовать EthernetProxy<> как тип, но не EthernetProxy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...