gpt4 book ai didi

c++ - 成员函数中静态变量的替代方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:45 26 4
gpt4 key购买 nike

我一直依赖于成员函数中定义的静态变量仅限于特定类实例的错误观念。

为了说明我的误解:

#include <iostream>
#include <string>

struct Simple {
template<typename T>
T & Test(const T & Value) {
static T Storage = Value;
return Storage;
}
};

int main() {
Simple A;
Simple B;

std::string Foo = A.Test(std::string("Foo"));
std::string Bar = B.Test(std::string("Bar"));

std::cout << Foo << ' ' << Bar << std::endl;
}

我预期的行为会导致输出

Foo Bar

是否有一种简单的替代方法可以导致我预期的行为?

编辑

有问题的类的简化版本:

class SignalManager {
private:
template<typename T> struct FunctionPointer { typedef boost::function1<void, const T &> type; };
template<typename T> struct Array { typedef std::vector<typename FunctionPointer<T>::type> type; };

template<typename T>
typename Array<T>::type & GetArray() {
static typename Array<T>::type Array;
return Array;
}

public:
template<typename T, typename M>
void Broadcast(const M & Value) {
typename Array<T>::type::iterator Iterator;
for(Iterator = GetArray<T>().begin(); Iterator != GetArray<T>().end(); ++Iterator) {
(*Iterator)(Value);
}
}

template<typename T, typename F>
void Connect(const F & Function) {
GetArray<T>().push_back(Function);
}
};

最佳答案

如果我理解你的困惑,另一种方法是成员变量......

template<typename T>
struct Simple {
T storage;

T & Test(const T & Value) {
storage = Value;
return Storage;
}
};

关于c++ - 成员函数中静态变量的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com