0

为了使引用类型更容易,您可以使用 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);
}
4

1 回答 1

1

在 using 声明之后,VC10 和 gcc 都可以使用不同的实例化运行代码。因此,似乎 using 声明已将整个模板带入范围。

同样在 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
};

这似乎表明不应将 using 与特定的模板 ID 一起使用。

于 2012-01-17T16:40:39.010 回答