gpt4 book ai didi

c++ - 整数常量表达式中不允许使用模板参数

转载 作者:行者123 更新时间:2023-11-28 00:35:32 24 4
gpt4 key购买 nike

编译此代码(SpiderMonkey 的一部分)时:

template<IsAcceptableThis Test, NativeImpl Impl>
JS_ALWAYS_INLINE bool
CallNonGenericMethod(JSContext *cx, CallArgs args)
{
const Value &thisv = args.thisv();
if (Test(thisv))
return Impl(cx, args);

return detail::CallMethodIfWrapped(cx, Test, Impl, args);
}

template<Value ValueGetter(JSObject *obj)>
static JSBool
Getter(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
return CallNonGenericMethod<ThisTypeArray::IsThisClass,
ThisTypeArray::GetterImpl<ValueGetter> >(cx, args);
}

我收到此错误,与 CallNonGenericMethod 的调用有关。

错误:'JS::Value ()(JSObject*)' 类型的模板参数'ValueGetter' 不允许出现在整型常量表达式中,因为不是整数或枚举类型*

ValueGetter 在哪里

inline Value
TypedArray::lengthValue(JSObject *obj)
{
JS_ASSERT(obj->isTypedArray());
return obj->getFixedSlot(LENGTH_SLOT);
}

template<Value ValueGetter(JSObject *obj)>
static bool
GetterImpl(JSContext *cx, CallArgs args)
{
JS_ASSERT(IsThisClass(args.thisv()));
args.rval().set(ValueGetter(&args.thisv().toObject()));
return true;
}

我在网上找不到任何有用的信息,而且我正在努力寻找问题所在。谁能澄清一下?

非常感谢。

最佳答案

这应该可以工作,您传递的是一个函数,而 C++ 应该将其转换为函数指针。也许您使该函数指针显式:

template<Value (*ValueGetter)(JSObject *obj)>

关于c++ - 整数常量表达式中不允许使用模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21114018/

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