所以,我最近使用c ++ 11的可变参数模板构建了一个委托系统,它就像一个魅力.
但是在系统中,我已经在创建时(我喜欢)给出了函数的参数,但是现在我还希望能够在调用时传递一些(变量)参数.为了达到这个目的,我去了我的代码,但是我正在解决问题;
error: parameter packs must be at the end of the parameter list
sorry, unimplemented: cannot expand ‘Arguments ...’ into a fixed-length argument list
error: type/value mismatch at argument 1 in template parameter list for ‘template<<declaration error>, class ... Params> class FunctionDelegate’
Run Code Online (Sandbox Code Playgroud)
......还有更多的东西,所以这里有一个产生问题的片段;
template<typename... Params>
class Runnable
{
public:
virtual void invoke(tuple<Params...> params) = 0;
virtual ~Runnable()
{
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的两个代理(FunctionDelegate和ObjectDelegate)的父类.这曾经是一个没有模板的类(因为invoke没有接受任何参数),但是因为我有一个可变参数模板列表,所以我必须修改我的子类(显然),我刚刚添加了另一个可变参数模板给他们;
template<typename... Arguments, typename... Params>
class FunctionDelegate : public Runnable<Params...>
{
public:
typedef void (*FunctionType)(Arguments..., Params...);
FunctionDelegate(FunctionType …Run Code Online (Sandbox Code Playgroud) 我的问题有点简单;
是否可以extern "C"在C++静态类函数上执行C linked()? - 不使用包装纸.
任何人都可以详细解释这个log2函数是如何工作的:
inline float fast_log2 (float val)
{
int * const exp_ptr = reinterpret_cast <int *> (&val);
int x = *exp_ptr;
const int log_2 = ((x >> 23) & 255) - 128;
x &= ~(255 << 23);
x += 127 << 23;
*exp_ptr = x;
val = ((-1.0f/3) * val + 2) * val - 2.0f/3; // (1)
return (val + log_2);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在java中执行以下操作:
public class ClassName<E> extends E
Run Code Online (Sandbox Code Playgroud)
不过这样做,我得到了:
error: unexpected type
Run Code Online (Sandbox Code Playgroud)
是不是就是这样,java不能这样做? - 如果是的话,我将如何实现这种效果?它在C++中完美运行,使用模板,类似:
template<typename E>
class ClassName: public E
Run Code Online (Sandbox Code Playgroud)
我真正想要实现的是能够以这种方式将类链接在一起,以实现java中多重继承的效果.
我目前正在获得一个非常奇怪的SIGSEGV(分段错误),不使用任何指针,只是枚举; 这是我的代码:
typedef enum
{
LIGHT,
DARK,
NONE
} Color;
class Board
{
public:
Color toMove();
private:
Color side;
};
Run Code Online (Sandbox Code Playgroud)
并且实施是:
Color Board::toMove()
{
return side;
}
Run Code Online (Sandbox Code Playgroud)
我只是简单地调用toMove();分段错误的结果; 这是gdb输出:
Program received signal SIGSEGV, Segmentation fault.
0x004025ee in Board::toMove (this=0x0)
at ...\board.cpp:19
19 return side;
Run Code Online (Sandbox Code Playgroud)
有人有个主意吗?
我正在构建一个lua事件系统(在lua中),但是我希望能够从C中触发事件,我想将C函数绑定到lua函数,这样C函数可以在lua中触发事件,我打算用:
lua_register
Run Code Online (Sandbox Code Playgroud)
功能; 但是我似乎找不到像这样绑定我的lua函数的方法,看起来我需要一个lua函数来做同样的事情,但是从lua方面来说,我正在考虑做一些hack,将C函数绑定到lua,简单地调用'lua_register',但这对我来说似乎有些不安全.
那我该怎么做呢?
我有以下功能;
template<typename T, typename U, typename... Parameters>
void transform(void (*func)(Parameters...))
{
auto lambda_function = [func](T args, U params)
{
auto combined = std::tuple_cat(args, params);
helper(func, combined);
};
return lambda_function;
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到一个可行的返回类型,或者打电话的方式,我希望能够将其称为相似的;
auto func = transform<std::tuple<char,int>, std::tuple<const char*>>(f);
func(arg, param);
Run Code Online (Sandbox Code Playgroud)
鉴于'f','arg'和'param'为;
void f(char arg1, int arg2, const char* arg3);
std::tuple<char,int> arg = std::tuple<char,int>('C',-3);
std::tuple<const char*> param = std::tuple<const char*>("PO");
Run Code Online (Sandbox Code Playgroud)
任何人都有提示,甚至解决方案?
注意:代码可以在; 连锁
我正在尝试使用实例化渲染 ( ANGLE_instanced_arrays)在 webgl 中绘制大量立方体。
但是,我似乎无法理解如何设置除数。我有以下缓冲区;
36 个顶点(6 个面由 2 个三角形组成,每个三角形使用 3 个顶点)。每个立方体 6 种颜色(每个面 1 种颜色)。每个立方体翻译 1 次。
重用每个立方体的顶点;我将它的除数设置为 0。对于颜色,我将除数设置为 2(即对两个三角形使用相同的颜色 - 一张脸))。对于平移,我将除数设置为 12(即 6 个面 * 每个面 2 个三角形的相同平移)。
为了渲染我打电话
ext_angle.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 36, num_cubes);
然而,这似乎并没有渲染我的立方体。
使用平移除数 1 确实如此,但那时颜色相差甚远,立方体是单一纯色。
我想这是因为我的实例现在是完整的立方体,但是如果我限制count(即每个实例的顶点),我似乎并没有完全通过顶点缓冲区,实际上我只是为每个立方体渲染一个三角形然后。
我将如何渲染大量这样的立方体;脸色各异?
说我要减去:0000 0000 - ( - 1)
那是:(两个补充)
0000 0000
- 1111 1111
---------
= ???? ????
Run Code Online (Sandbox Code Playgroud)
什么事情会发生,我的大脑现在真的和我在一起,它之前完全没问题,我认为它的溢出让我搞砸了,有人可以请一些清关吗:)?