C++ 整型常量表达式中不允许使用模板参数
编译此代码时(SpiderMonkey的一部分): 及C++ 整型常量表达式中不允许使用模板参数,c++,templates,compiler-errors,spidermonkey,C++,Templates,Compiler Errors,Spidermonkey,编译此代码时(SpiderMonkey的一部分): 及 模板 静态布尔 GetterImpl(JSContext*cx,CallArgs-args) { JS_断言(IsThisClass(args.thisv()); args.rval().set(ValueGetter(&args.thisv().toObject()); 返回true; } 我在网上找不到任何有用的信息,我正在努力找出问题所在。谁能澄清一下吗 谢谢。 < p>这是有效的,你正在传递一个函数,C++应该把它变成函数指针。也
模板
静态布尔
GetterImpl(JSContext*cx,CallArgs-args)
{
JS_断言(IsThisClass(args.thisv());
args.rval().set(ValueGetter(&args.thisv().toObject());
返回true;
}
我在网上找不到任何有用的信息,我正在努力找出问题所在。谁能澄清一下吗
谢谢。
< p>这是有效的,你正在传递一个函数,C++应该把它变成函数指针。也许可以将该函数指针显式化:template<Value (*ValueGetter)(JSObject *obj)>
模板
> > > p>这是有效的,你正在传递一个函数,C++应该把它变成函数指针。也许可以将该函数指针显式化:
template<Value (*ValueGetter)(JSObject *obj)>
模板
> > > p>这是有效的,你正在传递一个函数,C++应该把它变成函数指针。也许可以将该函数指针显式化:
template<Value (*ValueGetter)(JSObject *obj)>
模板
> > > p>这是有效的,你正在传递一个函数,C++应该把它变成函数指针。也许可以将该函数指针显式化:
template<Value (*ValueGetter)(JSObject *obj)>
模板
[C++11:14.1/4]:
非类型模板参数应具有以下类型之一(可选cv限定)类型:
- 整型或枚举型
- 指向对象的指针或指向函数的指针
- 对对象的左值引用或对函数的左值引用
- 指向成员的指针
- std::nullptr\t
但指向函数的指针不是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
看起来是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
然后再说一遍:
[C++11:14.1/8]:
一个类型为T
的数组或“函数返回T
”的非类型模板参数被调整为“指向T
的指针”或“指向函数返回T
的指针”
在C++03中,在相同的位置存在相同的措辞
因此,您的代码是有效的,并且您手头有一个编译器错误。
也许您可以通过自己调整模板参数来解决这个问题,尽管这取决于bug是什么
[C++11:14.1/4]:
非类型模板参数应具有以下类型之一(可选cv限定)类型:
- 整型或枚举型
- 指向对象的指针或指向函数的指针
- 对对象的左值引用或对函数的左值引用
- 指向成员的指针
- std::nullptr\t
但指向函数的指针不是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
看起来是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
然后再说一遍:
[C++11:14.1/8]:
一个类型为T
的数组或“函数返回T
”的非类型模板参数被调整为“指向T
的指针”或“指向函数返回T
的指针”
在C++03中,在相同的位置存在相同的措辞
因此,您的代码是有效的,并且您手头有一个编译器错误。
也许您可以通过自己调整模板参数来解决这个问题,尽管这取决于bug是什么
[C++11:14.1/4]:
非类型模板参数应具有以下类型之一(可选cv限定)类型:
- 整型或枚举型
- 指向对象的指针或指向函数的指针
- 对对象的左值引用或对函数的左值引用
- 指向成员的指针
- std::nullptr\t
但指向函数的指针不是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
看起来是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
然后再说一遍:
[C++11:14.1/8]:
一个类型为T
的数组或“函数返回T
”的非类型模板参数被调整为“指向T
的指针”或“指向函数返回T
的指针”
在C++03中,在相同的位置存在相同的措辞
因此,您的代码是有效的,并且您手头有一个编译器错误。
也许您可以通过自己调整模板参数来解决这个问题,尽管这取决于bug是什么
[C++11:14.1/4]:
非类型模板参数应具有以下类型之一(可选cv限定)类型:
- 整型或枚举型
- 指向对象的指针或指向函数的指针
- 对对象的左值引用或对函数的左值引用
- 指向成员的指针
- std::nullptr\t
但指向函数的指针不是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
看起来是这样的:
Value ValueGetter(JSObject *obj)
Value (*ValueGetter)(JSObject *obj)
然后再说一遍:
[C++11:14.1/8]:
一个类型为T
的数组或“函数返回T
”的非类型模板参数被调整为“指向T
的指针”或“指向函数返回T
的指针”
在C++03中,在相同的位置存在相同的措辞
因此,您的代码是有效的,并且您手头有一个编译器错误。
也许你可以通过自己调整模板参数来解决这个问题,尽管这取决于错误是什么。模板
:这意味着什么?可能是okd编译器(4.1.1)。试着传递一个函数指针而不是一个函数?2006不是很旧吗?最好是发布一个函数指针。什么是ThisTypeArray::GetterImpl
?我们不能真正看到模板参数的存在是一个问题:pr