2016-04-22 108 views
4

我在成员函数中使用静态矢量,并将值推回到该矢量中; ,但对于三个函数调用,矢量的大小仅为1。静态矢量的大小

我不知道如何为MVCE做MVCE,因为它对我来说也很好,所以问题显然是代码的其他部分。 我只是想知道或有一个想法,我的静态向量会给我这样的结果。

class X 
{ 
    //... 
}; 

template <typename T> 
void test(T a) 
{ 
    std::cout<<"Function called \n"; 
    static std::vector<X> vec; 
    std::lock_guard<std::mutex> lock(mx); 
    //Doing something else with T 
    X obj; 
    vec.push_back(obj); 
    std::cout<<"no of elements in vec is "<<vec.size()<<"\n"; 

} 

输出未来是

Function called 
no of elements in vec is 1 
Function called 
no of elements in vec is 1 
Function called 
no of elements in vec is 1 

成员函数从CPPREST http_client请求呼叫调用。

+2

您是否用不同类型的'T'调用了'test()'3次? – songyuanyao

+0

是的。但是测试相同的类的实例。 – Hummingbird

+0

然后有3个不同的'test()'与'vec'的3个实例,这是不相关的。 – songyuanyao

回答

3

请注意,不同类型的模板实例是不相关的。这意味着如果您用不同的类型T三次调用test(),则将实例化三个不相关的test(),其中3个不同的实例为vec。这就是为什么你得到的结果,他们的大小都是1

2

您的请求调用可能与此类似 int i = 1; float f = 2.5; char c ='A'; test(i); 测试(f); (c);

如果添加 test(i);

然后vec.size()测试(INT)将于2 虽然vec.size()测试(浮动)和测试(炭)将保持1

你可以阅读更多有关的行为在这里模板中的静态变量http://www.geeksforgeeks.org/templates-and-static-variables-in-c/

+0

是的,我明白了。感谢您的链接。 – Hummingbird