如何使用'using'声明模板基类的模板方法?

3
描述了两种访问模板基类成员的方法,具体请参见此处。当基类成员本身是一个模板时,使用上述第一种方法(this->)访问它的方式在此处描述。在这种情况下,是否有办法也使用第二种方法(使用xxxx)呢?
例如,在下面的代码中,是否可以将"????"替换为某些内容以使代码正常工作?
using namespace std;

template<typename T> class base
{
public:
    template<bool good> void foo()
    {
        cout << "base::foo<" << boolalpha << good << ">()" << endl;
    }
};

template<typename T> class derived : public base<T>
{
public:
    using ????
    void bar()
    {
        foo<true>();
    } 
};

可能是调用模板基类的模板函数的重复问题。 - AndyG
@AndyG 不,这不是重复的问题,因为问题更多地涉及如何在这里使用“using”(如果可能的话)。 - vsoftco
1
我认为在这里不能使用 using,因为你需要像 using base<T>::template foo; 这样的东西,但是在 using 语句中使用 template 关键字是被禁止的。 - AndyG
忘记移除 boolalpha 了吗? - 463035818_is_not_a_number
1
@vsoftco 不知道这个。这只是更让人不喜欢 using namespace std; 的另一个原因而已 ;) - 463035818_is_not_a_number
显示剩余4条评论
1个回答

1

仅供参考,虽然它没有提供任何答案或解决方法,但我目前正在使用VS Express 2013,并且我可以向您保证

#include <iostream>

template<typename T> class base
{
public:
    template<bool good> void foo()
    {
        std::cout << "base::foo<" << good << ">()" << std::endl;
    }
};

template<typename T> class derived : public base<T>
{
public:

    void bar()
    {
        foo<true>();
    }
};

struct A{};

void main() {

    derived<A> a;
    a.bar();
}

完美地运行...


感谢您的查看。我正在使用gcc。这篇文章解释了问题,并提到“即使一些编译器错误地(暂时?)接受它……”。也许他在暗示MSVC。 - Aelian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接