模板:: Stroustrup的示例不是编译

时间:2015-09-23 02:39:03

标签: c++ templates stl

“没有匹配的成员函数push_back”

在Bjarne的原始版本中,C的矢量写得像

vector<Value_type<C>*> res;

但是这个Value_type模板也不能正常工作 所以我只是用C *指针替换它,仍然没有帮助

#include <vector>
#include <string>
#include <iostream>

using namespace std;

template <typename C, typename V>
vector<C*> find_all(C& c, V v) {
    vector<C*> res;
    for (auto &x : c) {
        if (x==v)
            res.push_back(&x);
    }
    return res;
}

int main() {
    string s = "werqewreqwreqw";
    for (const auto p : find_all(s,'q')) {
        cout << p;
    }

}

1 个答案:

答案 0 :(得分:1)

var actionArray = [SKAction]() actionArray.append(SKAction.moveTo(CGPointMake(posAutoY1, -3*frame.size.height/20), duration: NSTimeInterval(duration1))) actionArray.append(SKAction.removeFromParent()) auto1.runAction(SKAction.sequence(actionArray)) C*不同。实际上,已经存在一个代表相同概念的typedef,即C::value_type*

C::pointer

仅供参考,template <typename C, typename V> vector<typename C::pointer> find_all(C& c, V v) { vector<typename C::pointer> res; 将为C::pointer,对于默认分配器或std::allocator_traits<T>::pointer,此为T*。我不完全确定为什么使用value_type*但是我假设Bjarne想要一个取代Value_type的元函数。