那么如何将可变数据从一个函数传递到另一个函数呢?
演示程序代码:
void * variadic_data = nullptr;
void send_1(){
if(sendto(...)){
variadic_data = static_cast<void *>(new int(123)); // from here
}
}
void send_2(){
if(sendto(...)){
variadic_data = static_cast<void *>(new std::string("test"));
}
}
void task(){
...
do {
i_result = recv(...);
std::string message(buff, i_result);
if(message == ...){
int * int_1 = static_cast<int *>(variadic_data); // to here
...
delete int_1 ;
} else if (message == ...) {
std::string * str_1 = static_cast<std::string *>(variadic_data);
...
delete str_1;
}
} while(i_result != 0 && i_result != SOCKET_ERROR);
}
我有一个带有recv的额外线程,还有几个带有sendto函数的线程,许多sendto的局部变量不同,并且在recv线程中响应后需要这些变量。我认为以额外的线程阻止recv是常见的方法。这仅仅是糟糕的应用程序设计吗?我应该创建消息管理器并在sendto之后立即选择吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
是的,通常可以使用模板功能。
在c ++ 17(或带有Boost)中,您可以使用std::any
。
在您的特定情况下,我将使用std::function
来对处理程序进行类型擦除。