gpt4 book ai didi

c++ - 带模板的虚纯函数,如何使其有效

转载 作者:行者123 更新时间:2023-11-28 01:56:34 24 4
gpt4 key购买 nike

我遇到这样一个场景:

  1. 需要定义一个接口(interface)
  2. 接口(interface)参数的类型和数量是任意的

所以,我需要一个模板函数,作为一个接口(interface),它应该是虚拟的,但编译器认为它是无效的,有什么办法吗?

示例代码:

struct none
{};

template<typename T>
struct stru_result
{
int result_code;
T result;

stru_result() :result_code(0)
{}
stru_result(const int& code) :result_code(code)
{}
stru_result(const int&code, const T& res) :result_code(code), result(res)
{}
stru_result(stru_result&& res)
{
result_code = res.result_code;
result = std::move(res.result);
}
stru_result(const stru_result& res)
{
result_code = res.result_code;
result = res.result;
}
void operator = (const stru_result& res)
{
result_code = res.result_code;
result = res.result;
}
};

template<>
struct stru_result<none>
{
int result_code;
stru_result():result_code(0)
{}
stru_result(const int& code):result_code(code)
{}
};

class itest
{
public:
template<typename T, typename ...Args>
virtual int get_reply_atall(std::tuple<stru_result<T>, stru_result<Args>...>& aoTuple) = 0;
};

class ctest : public itest
{
public:
ctest() {}
~ctest() {}

template<typename T, typename ...Args>
int get_reply_atall(std::tuple<stru_result<T>, stru_result<Args>...>& aoTuple) ;
};

template<typename T, typename...Args>
int ctest::get_reply_atall(std::tuple<stru_result<T>, stru_result<Args>...>& aoTuple)
{
std::tuple<stru_result<T>> firstTuple;
get_reply_atall<T>(firstTuple);

std::tuple<stru_result<Args>...> resTuple;
get_reply_atall(resTuple);

aoTuple = std::tuple_cat(firstTuple, resTuple);
return 0;
}

template<>
int ctest::get_reply_atall<int>(std::tuple<stru_result<int>>& aoTuple)
{
stru_result<int> res = stru_result<int>(0, 1);
aoTuple = std::make_tuple(res, res);
return 0;
}

template<>
int ctest::get_reply_atall<char*>(std::tuple<stru_result<char*>>& aoTuple)
{
char* ptr = "test";
stru_result<char*> res = stru_result<char*>(0, ptr);
aoTuple = std::make_tuple(res);
return 0;
}

最佳答案

你不能有一个“虚函数模板”,故事结束。您可以在每个派生类中有一个函数模板作为接口(interface)。如果客户端代码在没有此接口(interface)的派生类的对象上调用此类接口(interface),则会出现编译时错误,从而强制执行该接口(interface)。缺点是你不能从基类指针/引用调用这个接口(interface),你可以用通常的虚函数来做

关于c++ - 带模板的虚纯函数,如何使其有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40992514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com