成员函数中静态变量的替代项
An alternative to a static variable in a member function
我一直认为成员函数中定义的静态变量仅限于特定的类实例。
为了说明我的误解:
#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;
}
};
static T Storage = Value;
尽管多次调用成员函数Test
,但上述语句只执行一次。因此,请将声明和初始化分开。
template<typename T>
T & Test(const T & Value) {
static T Storage;
Storage = Value; // Now, this is guaranteed to execute during member function calls.
return Storage;
}
这应该会得到你想要的。
您可以将它变成一个常规的、非静态的类变量,尽管这需要类作为模板而不是函数。。。
template<typename T>
struct Simple
{
T& Test( const T& value )
{
storage = value;
return storage;
}
private:
T storage;
}
相关文章:
- 是否可以将变量/函数返回作为模板参数传递
- 是否有一种方法可以修复编译器未找到特定的OPENCV变量/函数
- 访问实例化类的变量/函数
- 如何在变量函数参数列表中检测给定类型的参数的可用性,并在处理完所有参数后采取行动
- C 多组变量函数参数
- 最有cpu效率的方法是使用std::算法和变量函数模板的参数
- 在此作用域中未声明条件变量函数
- C 关于将数组复制到向量并调用其变量 /函数
- 仅在C 中的一个变量上,两个变量函数的数值集成(使用数值配方库)
- 在应用变量函数的矩阵元素上循环
- 如何向调试器隐藏变量/函数名
- C++11变量函数类型模板参数
- 变量函数参数的奇怪问题
- C++变量函数和cout
- c++模板变量函数未定义引用
- 我可以使用枚举类值作为变量函数的参数吗?
- 从另一个类访问变量/函数
- <"变量/函数"的多重定义>
- 从c++到C文件中定义的变量/函数的未定义引用
- 为什么转换变量函数参数很重要?