gpt4 book ai didi

C++ 模板特化 不获取 int

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

我有以下代码:

template <typename T> LuaCall& operator>>(T) { BOOST_STATIC_ASSERT(sizeof(T) == 0); }
template <> LuaCall& operator>><int&>(int& val) { mResults.push_back(std::make_pair(LUA_RESULT_INTEGER, (void *)&val)); return *this; }
template <> LuaCall& operator>><float&>(float& val) { mResults.push_back(std::make_pair(LUA_RESULT_FLOAT, (void *)&val)); return *this; }
template <> LuaCall& operator>><double&>(double& val) { mResults.push_back(std::make_pair(LUA_RESULT_DOUBLE, (void *)&val)); return *this; }
template <> LuaCall& operator>><bool&>(bool& val) { mResults.push_back(std::make_pair(LUA_RESULT_BOOLEAN, (void *)&val)); return *this; }
template <> LuaCall& operator>><std::string&>(std::string& val) { mResults.push_back(std::make_pair(LUA_RESULT_STRING, (void *)&val)); return *this; }
template <> LuaCall& operator>><LuaNilStruct>(LuaNilStruct) { mResults.push_back(std::make_pair(LUA_RESULT_NIL, (void *)NULL)); return *this; }

然后:

int abc;
LuaCall(l, "test") % "test" % 5 % LuaNil % 2.333 >> abc;

我希望它能像 cin >> 那样工作,即它需要将 lua 函数的返回值写入 abc。所以我需要它的地址..但它默认使用默认模板。我究竟做错了什么?肯定有办法做到这一点,因为 cin 正是这样做的。

谢谢!


请注意将 % 更改为 >> 的人:我将其改回原样 :D 代码调用 Lua 函数 test("test", 5, nil, 2.333) 并保存其返回值到abc。 % 用于函数的参数,>> 用于返回值。

template <typename T>
LuaCall& operator%(T val) {
mLua->Push(val);
++mArguments;
return *this;
}

最佳答案

您将运算符>> 写成一元运算符,但它是二元运算符。 LeftHandSide >> RightHandSide .

表格std::cout <"Hello" << " world";因此是(operator<<(operator<<(std::cout, "Hello"), " world) ; - 第一个<<返回 std::cout 用作第二个 << 的左侧.

真正的问题是在您的代码中,查找发生如下:

  1. 确定候选函数(只有一个候选函数,模板)
  2. 推导出T。
  3. 确定要实例化的特化(如果有)。

在第 2 步中,T==int。在第 3 步中,T==int 没有特化因此选择并实例化了基本模板。您可能想要使用重载而不是特化。重载在步骤 1 中会更好地匹配,因此您甚至不会到达模板参数推导的地步

关于C++ 模板特化 <int&> 不获取 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630406/

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