c – 模板中的“const const T”

以下代码编译并适用于G 4.4.0和MS VC2008 Express.

#include <iostream>

template<typename T> struct A{
protected:
    T v;
public:
    const T get() const{
        return v;
    }

    A(T v_)
    :v(v_){
    }
};

class B: public A<const int*>{
public:
    void doSomething() const{
        const int* tmp = get();
        std::cout << *tmp << std::endl;
    }

    B(const int* p)
    :A<const int*>(p){
    }
};

int main(int argc, char** argv){
    int a = 134;
    B b(&a);
    const B& c = b;
    b.doSomething();
    c.doSomething();
    return 0;
}

但是,据我所知,使用A< const int *>应该导致const const int * A :: get()const;.而且我很确定我在实际代码中没有看到类似的东西.以这种方式使用模板“合法”吗?

如果没有,有什么替代方案?在我的代码中,我需要一个模板类,它提供两个“getter”方法(const / non-const),并且可以将“const int *”作为一个类型.像这样的东西:

template<typename T> struct A{
protected:
    T v;
public:
    const T get() const{
        return v;
    }

    T get(){
        return v;
    }

    A(T v_)
    :v(v_){
    }
};

有任何想法吗?

如果T = const int *,那么const T是const int * const.
相关文章
相关标签/搜索