小编The*_*ski的帖子

C++数组下标运算符模板

在尝试更轻松地访问存储类之后,我最终遇到了一些我不太了解的情况.并且,找到试图与我做同样事情的人并不容易.

我正在尝试做的是,有一个类在内部存储一个值数组作为字符串,但允许从用户端进行简单的类型转换.我计划做的是使用数组下标运算符返回他们通过模板指定的任何类型.虽然,它听起来比它在实践中的效果好很多.这是我正在做的一个简单示例,让您了解它应该如何工作.

class StringList
{
    public:
    template <typename T> 
    T operator[](const int i)
}
Run Code Online (Sandbox Code Playgroud)

从那里,我将定义一些特定的模板,任何用户都可以很容易地定义更多,如果需要.但是,最大的问题是,我不知道如何使用模板调用下标运算符.起初我假设以下(显然不正确),考虑它类似于调用模板方法的标准方法.

StringList list;
T var = list<T>[0];
Run Code Online (Sandbox Code Playgroud)

有谁知道调用下标运算符作为模板的正确方法?或者,我应该避免这样做,并使用命名方法?

c++ templates metaprogramming operator-overloading

9
推荐指数
2
解决办法
4110
查看次数

可以退出锁定互斥锁的进程导致死锁吗?

我一直想象,就像记忆一样,操作系统有责任在一个过程结束后进行清理.不幸的是,我很难找到这方面的证据,所以我无法保证会发生什么.

我的主要问题是,如果一个进程正在锁定一个互斥锁会发生什么情况,它会在很少或没有清理的情况下突然退出(即在C中调用abort,或者在C++中终止)?

  • 是否保证操作系统将解锁互斥锁,或者只是暗示大多数信誉良好的系统会(类似于未发布的内存)?

  • 如果没有保证,这是否真的会在仍在运行的进程和死进程持有的锁之间造成死锁

  • 如果可以通过这种方式创建死锁,是否可以在进程的线程之间复制,而不是通过单独进程之间的共享互斥锁?

mutex deadlock process

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

C++ 11 Regex查找捕获组标识符

我已经查看了C++ 11的新正则表达式库的许多来源,但是大多数都关注语法,或者更基本的用法,例如regex_match或regex_search.虽然这些文章帮助我开始使用正则表达式库,但我很难找到有关捕获组的更多详细信息.

我想要完成的是找出匹配所属的捕获组.到目前为止,我只找到了一种方法来做到这一点.

#include <iostream>
#include <string>
#include <regex>

int main(int argc, char** argv)
{
    std::string input = "+12 -12 -13 90 qwerty";
    std::regex pattern("([+-]?[[:digit:]]+)|([[:alpha:]]+)");

    auto iter_begin = std::sregex_token_iterator(input.begin(), input.end(), pattern, 1);
    auto iter_end = std::sregex_token_iterator();

    for (auto it = iter_begin; it != iter_end; ++it)
    {
        std::ssub_match match = *it;
        std::cout << "Match: " << match.str() << " [" << match.length() << "]" << std::endl;
    }

    std::cout << std::endl << "Done matching..." << std::endl;
    std::string temp;
    std::getline(std::cin, temp);

    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ regex c++11

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

Lua C API推送现有指针

假设我有一个 C 端拥有的指针,我希望以用户数据的形式将其推送到 Lua 堆栈上。在不牺牲指定特定元表的能力的情况下,实现此目的的最佳方法是什么?

我最初的想法是使用轻量用户数据,但从我在这里读到的内容来看,所有轻量用户数据共享一个公共元表。这是不可取的,因为它会强制我的所有 c 面对象具有共同的行为。

考虑到我希望为 Lua 分配的对象重用元表,只需将不同的 this 指针传递给元方法,我的第二个想法涉及将人工 this 指针附加到用户数据对象。

struct ud
{               
    struct T* ptr;
    struct T data;
};

struct ud* p = (struct ud*)lua_newuserdata(L, sizeof(struct ud));
p->ptr = &(p->data);
Run Code Online (Sandbox Code Playgroud)

或者,在推送少量用户数据的情况下

struct T object;
struct T** p = (struct T**)lua_newuserdata(L, sizeof(struct T*));
*p = &object;
Run Code Online (Sandbox Code Playgroud)

是否建议附加 this 指针,或者是否有更 API 友好的替代方案?我的最终目标只是将现有的指针推送到 Lua,并将元表与其关联起来,以便元表可以重用于重型和轻型用户数据。

c api lua

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