我在成员函数中使用静态向量并将值推回到该向量中; 但是对于三个函数调用,向量的大小只有1。
我不知道如何制作MVCE,因为在MVCE中它也适合我,所以问题显然是代码的其他部分。 我只想知道或了解我的静态向量在哪种情况下会给我这样的结果。
Asynctask.cancel(true)
输出结果是
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";
}
从CPPREST http_client请求调用中调用成员函数。
答案 0 :(得分:3)
请注意,具有不同类型的模板实例化无关紧要。这意味着如果您使用不同类型test()
三次调用T
,则将实例化三个不相关的test()
,其中包含3个不同的vec
实例。这就是为什么你得到的结果是它们的大小都是1
。
答案 1 :(得分:2)
您的请求呼叫可能与此类似 int i = 1; float f = 2.5; char c ='A'; 试验(ⅰ); 试验(F); 试验(c)中;
如果你添加 试验(ⅰ);
然后test(int)的vec.size()将为2 虽然test(float)和test(char)的vec.size()将保持为1。
您可以在http://www.geeksforgeeks.org/templates-and-static-variables-in-c/
中详细了解模板中静态变量的行为