Quiero crear un registrador de subprocesos múltiples en c++ que también se pueda llamar desde el código c .
Esto está en mi archivo source.cpp :
#include <cstdlib> #include <iostream> #include <thread> #include "source.h" using namespace std; #ifdef __cplusplus extern "C" { #endif class thread_obj { public: void operator()(float* x) { printf("value: %d", x); } }; void log(float value) { thread th1(thread_obj(), value); th1.join(); } #ifdef __cplusplus } #endif Y esto está en source.h :
#ifdef __cplusplus extern "C" { #endif void log(float value); #ifdef __cplusplus } #endif Y ahora quiero usar esto desde un archivo C como: log(myFloatValue); , por supuesto con el archivo de encabezado incluido.
Pero tengo algunos errores extraños, como:
Error C2672 'invoke': no matching overloaded function found myproj C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 43 Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Ty1 &&,_Types2 &&...) noexcept(<expr>)' myproj C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39 Error C2780 'unknown-type std::invoke(_Callable &&) noexcept(<expr>)': expects 1 arguments - 2 provided hackatlon_0_0_1 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\thread 39Mi pregunta es, ¿cómo puedo hacer esto o cómo puedo solucionar estos errores?
Hay varios problemas con su código:
float x NOT float* ya que esto es lo que está pasando al subproceso"%d" . Debería ser "%f" ya que la entrada es flotanteextern "C" para las clases. Está evitando la manipulación de nombres solo para la función de log que debe llamarse desde el archivo c.