Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设计记录器以转储用户定义的结构_C++_Templates_Inheritance_Derived Class - Fatal编程技术网

C++ 设计记录器以转储用户定义的结构

C++ 设计记录器以转储用户定义的结构,c++,templates,inheritance,derived-class,C++,Templates,Inheritance,Derived Class,我有一些用户定义的结构(不能更改),我想存储在地图中 在我的课上。 i、 e 记录器应该使用巫毒魔法将这些状态推到地图中,并以无缝方式处理它们 我看到了一些类似的问题,其中一些评论提到boost::any和boost::shared_ptr;如果有人能详细说明这些选项,那将非常有帮助 谢谢大家! 编辑1: 我希望我的Logger类在我打算转储的每个结构上都有一个LogState方法,这有点愚蠢。这一点,再加上想要对所有这些类型使用单个容器(映射),加剧了我的问题 假设我有一个StateLogge

我有一些用户定义的结构(不能更改),我想存储在地图中 在我的课上。 i、 e

记录器应该使用巫毒魔法将这些状态推到地图中,并以无缝方式处理它们

我看到了一些类似的问题,其中一些评论提到boost::any和boost::shared_ptr;如果有人能详细说明这些选项,那将非常有帮助

谢谢大家!

编辑1: 我希望我的Logger类在我打算转储的每个结构上都有一个LogState方法,这有点愚蠢。这一点,再加上想要对所有这些类型使用单个容器(映射),加剧了我的问题

假设我有一个StateLogger模板类(单例),它解决了我上面的问题。 所有好的东西都是在编译时为我生成的,我可以为我想要的每个结构存储数据包

我的Logger类(也是一个单例)将是StateLogger与之交互的对象。 这样,我就可以将特定于状态的逻辑与通用逻辑解耦

让我再仔细考虑一下。橡皮鸭解决问题很酷

class Logger {
private:
map<string, vector<myType*> > myLog;
}
class MyTypeBase {
}

template <typename T>
class MyTypeDerived : MyTypeBase {
void DoStuff(const T* tPtr);

private:
vector<T> myList;
} 
class Logger {
LogState(const A* aPtr); 
LogState(const B* bPtr); 

private:
map<string, vector<MyTypeBase*> > myLog;
}
Logger::LogState(aPtr);
Logger::LogState(bPtr);