一个自动提供getter和setter函数的基类C ++

时间:2015-05-18 06:21:07

标签: c++ c++11

我的用例就像。

  1. 我有一些普通字段,需要一个基本的线程安全getter和setter。

  2. 对于某些字段,需要使用自定义getter和setter。

  3. 这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

标准库提供atomic,用于简单的线程安全获取和值设置。 http://en.cppreference.com/w/cpp/atomic/atomic

请注意,正确的线程安全几乎总是涉及在std::atomic中包含一些成员并将其称为一天的更多内容。

答案 1 :(得分:-1)

要直接回答这个问题,我认为没有一个好的答案。

与C#不同,C ++似乎没有内置于语言中的自动getset生成,虽然可能有一种复杂的方式“有机地”(模板,也许? );您可能遇到的任何解决方案最终都可能成为IDE或实用程序中内置的某种工具,例如Eclipse或Code :: Blocks。

此外,C ++ 03形式的C ++通常不具有线程安全性;在以后的版本(C ++ 11及更高版本)中添加了对多线程,线程管理,异步和内存安全的支持,但由于C ++的本质,我不相信C ++本身就是线程安全的(至少现在)。

虽然std::atomic<type whatever>可能是一个可行的选择,但您可能还需要记住它确实是语言的“附加”并且会产生时间成本,就像大多数其他具有多线程的构造一样(甚至处理器级别的原子操作也有些慢)。您可以使用互斥体的路径,但是我们再次进入多线程领域,这可能超出了您的问题范围。