相关疑难解决方法(0)

我必须在何处以及为何要使用"模板"和"typename"关键字?

在模板,在那里,为什么我必须把typenametemplate上依赖的名字呢?究竟什么是依赖名称?我有以下代码:

template <typename T, typename Tail> // Tail will be a UnionNode too.
struct UnionNode : public Tail {
    // ...
    template<typename U> struct inUnion {
        // Q: where to add typename/template here?
        typedef Tail::inUnion<U> dummy; 
    };
    template< > struct inUnion<T> {
    };
};
template <typename T> // For the last node Tn.
struct UnionNode<T, void> {
    // ...
    template<typename U> struct inUnion {
        char fail[ -2 + (sizeof(U)%2) ]; // Cannot be instantiated for any …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++-faq dependent-name typename

1061
推荐指数
8
解决办法
15万
查看次数

带模板的c ++迭代器

我有一个关于如何在模板方式下使用迭代器的问题.
这是我想要做的一个例子,问题是,在for循环中如何初始化迭代器pp?

我读过类似的问题,但我不能完全理解,因为我是初学者.
迭代器类型应该在这个C++模板中应该是什么?
任何人都可以帮助并提供一些简单的解释吗?

#include <iostream>
#include <vector>

template <class T>
void my_print(std::vector<T> input){
    for(std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
        std::cout << *pp << "\n";
}
int main(int argc,char* argv[]){
    std::vector<int> aa(10,9);
    my_print(aa);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息:
'std :: vector :: iterator'被解析为非类型,但实例化产生一个类型

c++ iterator

9
推荐指数
1
解决办法
1万
查看次数

非类型模板参数,其类型取决于另一个参数

我试图定义一个具有类型参数和非类型参数的模板函数。但是,非类型参数的类型取决于类型参数。它看起来像下面这样:

\n\n
template<typename T>\nclass A{\n    typedef T* Pointer;\n};\n\ntemplate<typename T, A<typename T>::Pointer P>\nT fun(){\n    return *P;\n}\n\nint main(){\n    fun<int, (int*)0>();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我编译代码,编译器会抱怨:

\n\n
test.cpp:6:34: error: template argument 1 is invalid\n template<typename T, A<typename T>::Pointer P>\n                                  ^\ntest.cpp:6:45: error: expected \xe2\x80\x98>\xe2\x80\x99 before \xe2\x80\x98P\xe2\x80\x99\n template<typename T, A<typename T>::Pointer P>\n                                             ^\n
Run Code Online (Sandbox Code Playgroud)\n\n

我应该怎么做才能让我的代码正常工作?谢谢你!

\n\n

附言。上面的代码只是结构的一个例子。我知道代码本身毫无意义。

\n

c++ templates

1
推荐指数
2
解决办法
1262
查看次数

标签 统计

c++ ×3

templates ×2

c++-faq ×1

dependent-name ×1

iterator ×1

typename ×1