小编Sea*_*ean的帖子

C++ 11可重入类锁定策略

我有一个使用pimpl成语的界面,但界面需要是可重入的.但是,调用线程不需要知道锁定.这四点部分的问题,一部分无偿做作C++ 11例(例如包括解决,我已经跨越再运行几个常见问题,这样的问题:locking,pimpl,rvalue这里的答案在他们的品质是有些暧昧和C++ 11) .

在标题中,example.hpp:

#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP

#include <memory>
#include <string>

#ifndef BOOST_THREAD_SHARED_MUTEX_HPP
# include <boost/thread/shared_mutex.hpp>
#endif

namespace stackoverflow {

class Example final {
public:
  typedef ::boost::shared_mutex shared_mtx_t;
  typedef ::boost::shared_lock< shared_mtx_t > shared_lock_t;
  typedef ::boost::unique_lock< shared_mtx_t > unique_lock_t;

  Example();
  Example(const std::string& initial_foo);

  ~Example();
  Example(const Example&) = delete;             // Prevent copying
  Example& operator=(const Example&) = delete;  // Prevent assignment

  // Example getter method that supports rvalues
  std::string foo() const;

  // Example …
Run Code Online (Sandbox Code Playgroud)

c++ boost design-patterns locking c++11

8
推荐指数
1
解决办法
1418
查看次数

在lua中有一种方法可以将upvalue绑定到userdata值而不是函数吗?

在以下示例中,将userdata创建一个类型的值,MyType并使用__tostring调用的元函数创建一个表LI_MyType__tostring.该代码创建了一个基于闭包的lua OOP.我对提供的示例的抱怨似乎只有一种方法可以userdata通过upvalues与方法调用相关联.除非我想跨实例共享相同的元表,否则这本身并不成问题.

在一个理想的世界 - 以及我希望用这个问题发掘的东西 - 有没有办法将upvalue与值(例如userdata)相关联,而不通过upvalue将它与函数调用相关联?我希望有一个技巧可以让我继续使用基于闭包的lua OOP 在实例之间共享相同的元数据.我不乐观,但我想我会问是否有人有建议或不明显的伎俩.

using FuncArray = std::vector<const ::luaL_Reg>;
static const FuncArray funcs = {
  { "__tostring", LI_MyType__tostring },
};

int LC_MyType_newInstance(lua_State* L) {
  auto userdata = static_cast<MyType*>(lua_newuserdata(L, sizeof(MyType)));
  new(userdata) MyType();

  // Create the metatable
  lua_createtable(L, 0, funcs.size());     // |userdata|table|
  lua_pushvalue(L, -2);                    // |userdata|table|userdata|
  luaL_setfuncs(L, funcs.data(), 1);       // |userdata|table|
  lua_setmetatable(L, -2);                 // |userdata|
  return 1;
}

int LI_MyType__tostring(lua_State* L) {
  // NOTE: …
Run Code Online (Sandbox Code Playgroud)

c++ lua metatable

5
推荐指数
1
解决办法
1110
查看次数

隐藏Lua metatable并仅暴露对象的属性

如何创建仅暴露其属性而不是其方法的Lua对象?例如:

local obj = {
  attr1 = 1,
  attr2 = 2,
  print = function(...)
    print("obj print: ", ...)
  end,
}
Run Code Online (Sandbox Code Playgroud)

生产:

> for k,v in pairs(obj) do print(k, v) end
attr1   1
attr2   2
print   function: 0x7ffe1240a310
Run Code Online (Sandbox Code Playgroud)

另外,是否可以在Lua中不使用OOP的冒号语法?我不需要继承,多态,只需要封装和隐私.

lua metatable lua-5.2 lua-table

4
推荐指数
1
解决办法
3076
查看次数

跨平台C++命令行实用程序

我需要开发一个Windows/Linux命令行实用程序.该实用程序将与在两个平台上都具有标准API的中间件进行通信.我以前在FreeBSD/Linux上做过一些跨平台开发,这样做要容易得多 - 而且我的团队中有人可以与我交谈.

在这一点上,我的小组中没有人处理过Windows/Linux开发项目.我正在寻找有关如何最好地设置它的建议.我也是C++的新手,我主要开发了C#/ .Net GUI应用程序和Linux设备驱动程序级别的"东西".有点奇怪的混合.

我认为最好定义我自己的数据类型而不是使用Linux或Windows定义的类型 - 将操作系统特定代码保存在单独的文件夹中并有条件地包含.这就是我们为Linux/BSD工作所做的一切.所以这似乎是一个良好的开端.

这里的开发人员之一是Boost的忠实粉丝...另一个想法是TCLAP命令行解析器库更容易使用......显然一切都必须与许可兼容.

代码将是开源的,但它是生产代码 - 所以我不想马虎.我还应该做什么或寻找什么?那里有最好的做法吗?

c++ cross-platform

3
推荐指数
1
解决办法
2001
查看次数