小编jam*_*o00的帖子

C++:使用模板变量进行优化

目前,我有一些代码如下

template<typename Type>
Type* getValue(std::string name, bool tryUseGetter = true)
{
    if(tryUseGetter)
    {
        if(_properties[name]->hasGetter)
        {
            return (Type*)_properties[name]->getter();
        }
        return (Type*)_properties[name]->data;
    }
    else
    {
        return (Type*)_properties[name]->data;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让tryUseGetter成为编译时开关?即将它移动到模板声明,所以它类似于此

template<typename Type, bool tryUseGetter = true>
...
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ optimization gcc templates

3
推荐指数
2
解决办法
1080
查看次数

Html Canvas智能绘图

我目前正在实现一个基于HTML画布的webapp,它具有平移功能.有没有办法使用辅助缓冲区来保持当前可见的区域,所以当我平移时,我不需要重绘整个画布,只需绘制新的可见区域?

html javascript canvas

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

没有足够的变量来适应哨兵

根据exec引用,对exec(或一般的堆栈检查vararg函数)的调用在(char*)NULL参数列表的末尾需要一个aka 0.然而,海湾合作委员会抱怨以下代码

char cmdFullPath[4096]; //yes this 4096 thing is bad coding practice 
...
execl(cmdFullPath, (char*)NULL);

//warning: not enough variable arguments to fit a sentinel
Run Code Online (Sandbox Code Playgroud)

谁知道什么是错的?

c gcc function exec system-calls

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

引用我自己的类型的最佳方式

abstract class A<T> where T:A<T>
{
    public event Action<T> Event1;
}

class B : A<B>
{
    //has a field called Action<B> Event1;
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?我希望基类中的东西(事件等)能够使用子类的类型.

c# generics

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

使用Boost函数和C++类方法的C++回调

是否有非hacky(即没有汇编,...)方式使用boost函数来创建非静态类方法的回调?

目前用于静态方法:

list<function<void (LuaState&)> > _callbacks;
Run Code Online (Sandbox Code Playgroud)

我正在思考一些事情

list<tuple<function<void (void *, LuaState&)>, void*> _callbacks;
Run Code Online (Sandbox Code Playgroud)

但是增强功能不喜欢那些void*.

c++ methods boost class function

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

Visual C++版本的GCC函数

是否有以下的Visual C++版本(在GCC中)?

  1. __builtin_return_address
  2. __builtin_frame_address

参考 - http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html

如果没有,有没有办法模仿它们?

谢谢.

c++ gcc g++ visual-c++

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

float vs unorm 0-> 1,哪一个更精确?

  • Float - 标准32位IEEE浮点数
  • unorm - 32位(范围0-> 1)

当用于表示0-> 1范围内的数据时哪一个更精确?或者没有精确度差异?

c++ floating-point directx

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

Windows消息奇怪

可能只是某种严重疏忽,但我没有在消息循环中收到任何WM_SIZE消息.但是,我确实在WndProc中收到了它们.我以为windows循环向WndProc发送了消息?

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch(message)
    {
        // this message is read when the window is closed
    case WM_DESTROY:
        {
            // close the application entirely
            PostQuitMessage(0);
            return 0;
        } break;
    case WM_SIZE:
        return 0;
        break;
    }
    printf("wndproc - %i\n", message);
    // Handle any messages the switch statement didn't
    return DefWindowProc (hWnd, message, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)

......现在消息循环......

while(TRUE)
{
    // Check to see if any messages are waiting in the queue
    if(PeekMessage(&msg, …
Run Code Online (Sandbox Code Playgroud)

c++ windows

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

C++编译时鸭子用接口打字

有没有办法在C++中执行以下操作

template<typename TAnimal>
bool can_eat(TAnimal& animal) where bool TAnimal::IsAlive() exists
{
    return !animal.IsAlive();
}

//...

Duck duck;
assert(can_eat(duck) == true); //compiles

Wood wood;
can_eat(wood); // fails to compile because wood doesn't have IsAlive()
Run Code Online (Sandbox Code Playgroud)

在我看来,显式接口使得函数期望更清楚.但是,我不想创建一个实际的接口类(非常繁琐).

c++ templates duck-typing

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

Ruby Code Critique

我是一个Ruby新手(4天前开始,嘿韵!)并决定编写一个简单的小工具,用于娱乐/学习.以下代码是结果.它工作正常,但我真的很感谢来自一些更有经验的Ruby开发人员的批评.我正在寻找关于风格,冗长和任何misc的评论.提示与技巧.

顺便说一句,我真的很想知道如何重写lambda递归更优雅.(ctrl-f代表'lambda recursion')

注意:这不是Ruby On Rails项目.这是Eve Online的一个小工具.

require 'rubygems'
require 'reve'
require 'yaml'

BASE_SKILLPOINTS = [0, 250, 1414, 8000, 45255, 256000]

def calc_remaining_sp(rank, from_level, to_level)
  sp = BASE_SKILLPOINTS.map { |x| x * rank }
  [sp[to_level] - sp[from_level], 0].max
end

def summarize_skills(user_id, api_key)
  spec = YAML::load(File.open('ukc_skillsets.yaml'))

  api = Reve::API.new user_id, api_key

  #skill id => general skill info
  skills_list = Hash[api.skill_tree.map { |x| [x.type_id, x] }]


  api.characters.each { |char|
    char_sheet = api.character_sheet :characterID => char.id

    puts ""
    puts "Character - #{char.name}"
    puts …
Run Code Online (Sandbox Code Playgroud)

ruby recursion lambda yaml

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