std::目标获取指针参数的线程错误

std::thread error for target taking pointer args

本文关键字:线程 错误 参数 指针 目标 获取 std      更新时间:2023-10-16

我有一个类似于以下内容的设置,

A.hpp

#include <thread>
class A {
    static void foo(char*, char*);
    void bar() {
        char* char_start = (char*) malloc(100 * sizeof(char));
        char* char_end = char_start + (100 * sizeof(char)) - 1;
        std::thread t(foo, char_start, char_end);
        t.join();
        return;
    }
};

主.cpp

int main() { 
    A.bar();            
    return 0;
}

我编译

g++ -std=c++14 -pthread main.cpp

并获得:

usr/include/c++/4.9/functional: In instantiation of ‘struct std::_Bind_simple<void (*(long unsigned int*, char*, char*))(long unsigned int*, char*, char*, const bool&)>’:
/usr/include/c++/4.9/thread:140:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(long unsigned int*, char*, char*, const bool&); _Args = {long unsigned int*, char*, char*}]’
A.cpp:100:151:   required from here
/usr/include/c++/4.9/functional:1665:61: error: no type named ‘type’ in ‘class std::result_of<void (*(long unsigned int*, char*, char*))(long unsigned int*, char*, char*, const bool&)>’
typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                         ^
/usr/include/c++/4.9/functional:1695:9: error: no type named ‘type’ in ‘class std::result_of<void (*(long unsigned int*, char*, char*))(long unsigned int*, char*, char*, const bool&)>’
 _M_invoke(_Index_tuple<_Indices...>)

我无法解释此错误。任何帮助都非常感谢。

编辑:我很抱歉,因为我遗漏了这样一个事实,即foo也将默认布尔参数设置为 false 。删除默认参数可以编译它。

A.bar()不是

有效的语言结构。您只能在 A 的实例上调用bar(),而不能在类型名 A 上调用。

通过改变

A.bar();          

A a;
a.bar();

并提供A::foo()的虚拟实现,我能够构建和运行该程序。