Использование предложения в классе шаблона - PullRequest
0 голосов
/ 17 января 2012

Чтобы упростить ссылочные типы, вы можете перенести отдельные типы в текущую область с помощью предложения using:

namespace MyCompany
{
    namespace MyProject
    {
        class MyType {};
        void myFunc(MyType const& obj) {}
    }
}

int main()
{
    using MyCompany::MyProject::MyType;
    using MyCompany::MyProject::myFunc;

    MyType  plop;
    myFunc(plop);
}

Проблема заключается в том, является ли класс шаблоном (или функцией).Можно ли перенести их в текущую область, не создавая их экземпляров?

namespace MyCompany
{
    namespace MyProject
    {
        template<typename T>
        class MyType {};

        template<typename T>
        void myFunc(MyType<T> const& obj) {}
    }
}

int main()
{
    // Can I bring the templates into scope?
    // Or do I need to fully instantiate each version in the using clause?
    using MyCompany::MyProject::MyType;  ????
    using MyCompany::MyProject::myFunc;  ????

    MyType  plop;
    myFunc(plop);
}

1 Ответ

1 голос
/ 17 января 2012

И VC10, и gcc запускают код нормально с разными экземплярами после объявления об использовании. Похоже, что объявление об использовании принесло весь шаблон в область видимости.

Также в стандарте c ++ 0x n3290 7.3.3 - 5

A using-declaration shall not name a template-id. [ Example:
struct A {
 template <class T> void f(T);
 template <class T> struct X { };
};
struct B : A {
 using A::f<double>; // ill-formed
 using A::X<int>; // ill-formed
};

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

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