小编Ske*_*een的帖子

多个可变模板化委托系统

所以,我最近使用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)

c++ templates delegates metaprogramming c++11

2
推荐指数
1
解决办法
1062
查看次数

C链接C++静态函数

我的问题有点简单;

是否可以extern "C"在C++静态类函数上执行C linked()? - 不使用包装纸.

c c++ extern

2
推荐指数
1
解决办法
212
查看次数

我需要一个浮点专家

任何人都可以详细解释这个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)

math floating-point logarithm ieee-754

1
推荐指数
1
解决办法
158
查看次数

使用泛型类型java扩展类

我正在尝试在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中多重继承的效果.

java generics inheritance templates multiple-inheritance

1
推荐指数
1
解决办法
1243
查看次数

奇怪的SIGSEGV(分段错误)使用枚举

我目前正在获得一个非常奇怪的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)

有人有个主意吗?

c++ enums enumeration segmentation-fault

0
推荐指数
2
解决办法
1144
查看次数

Lua/C绑定,从lua绑定

我正在构建一个lua事件系统(在lua中),但是我希望能够从C中触发事件,我想将C函数绑定到lua函数,这样C函数可以在lua中触发事件,我打算用:

lua_register
Run Code Online (Sandbox Code Playgroud)

功能; 但是我似乎找不到像这样绑定我的lua函数的方法,看起来我需要一个lua函数来做同样的事情,但是从lua方面来说,我正在考虑做一些hack,将C函数绑定到lua,简单地调用'lua_register',但这对我来说似乎有些不安全.

那我该怎么做呢?

c lua binding

0
推荐指数
1
解决办法
1371
查看次数

确定可变参数C++ 11模板化lambda函数的返回类型

我有以下功能;

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)

任何人都有提示,甚至解决方案?

注意:代码可以在; 连锁

c++ lambda freestanding c++11

0
推荐指数
1
解决办法
162
查看次数

WebGL; 实例化渲染 - 设置除数

我正在尝试使用实例化渲染 ( 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(即每个实例的顶点),我似乎并没有完全通过顶点缓冲区,实际上我只是为每个立方体渲染一个三角形然后。

我将如何渲染大量这样的立方体;脸色各异?

buffer instance webgl

0
推荐指数
1
解决办法
2089
查看次数

二进制减法

说我要减去:0000 0000 - ( - 1)

那是:(两个补充)

      0000 0000
    - 1111 1111
      ---------
    = ???? ????
Run Code Online (Sandbox Code Playgroud)

什么事情会发生,我的大脑现在真的和我在一起,它之前完全没问题,我认为它的溢出让我搞砸了,有人可以请一些清关吗:)?

binary assembly overflow subtraction

-1
推荐指数
1
解决办法
2096
查看次数