小编def*_*ode的帖子

一个std :: map like容器,它将类型映射到值

我正在寻找一个混合元容器/容器类.我想要一个将编译时类型映射到运行时值的类.代码snippit价值1024字,所以:

struct Foo { /* ... */ };
struct Bar { /* ... */ };

int main()
{
   meta_container<Foo,float,int> mc;
   mc.get<float>() = 1.0f;
   mc.get<Foo>().method(blah);
   mc.get<Bar>(); //compiler error
}
Run Code Online (Sandbox Code Playgroud)

这真是无聊的东西.使用可变参数模板的实现会很有趣,但界面非常简单.

使这更难的部分是我想要的最后一个功能.

void foo( const meta_constainer<Foo,Bar,Baz>& mc );

//make_mc is sorta like make_pair or make_tuple.

int main()
{
   foo( make_mc(Foo(), Bar(), Baz()) );  // not really interesting
   foo( make_mc(Bar(), Foo(), Baz()) );  // this is more challenging
   foo( make_mc(Foo()) );  // this might be difficult as well.
}
Run Code Online (Sandbox Code Playgroud)

我可以编写这样一个容器,但我想找一个已经编写/调试过的容器.我最大的绊脚石是缺乏搜索的好关键词(异构容器不是我想要的).

是否有一个具有此接口或类似接口的Boost库? …

c++ templates metaprogramming

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

使用Lua时在C++中进行堆栈展开

我最近偶然发现了这个C++/Lua错误

int function_for_lua( lua_State* L )
{
   std::string s("Trouble coming!");
   /* ... */
   return luaL_error(L,"something went wrong");
}
Run Code Online (Sandbox Code Playgroud)

错误是luaL_error使用longjmp,因此堆栈永远不会解开并且s永远不会被破坏,泄漏内存.还有一些Lua API无法解开堆栈.

一个显而易见的解决方案是在C++模式下编译Lua,但有例外.然而,我不能像Luabind那样需要标准的C ABI.

我目前的想法是编写我自己的函数,模仿Lua API的麻烦部分:

// just a heads up this is valid c++.  It's called a function try/catch.
int function_for_lua( lua_State* L )
try
{
   /* code that may throw Lua_error */
}
catch( Lua_error& e )
{
   luaL_error(L,e.what());
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:function_for_lua堆栈是否正确解开.可能会出错吗?

c++ lua destructor stack-unwinding

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

我可以在内核中使用protobufs吗?

我需要使用Linux设备驱动程序定义通信协议. Protobufs看起来非常好,并且有一个活动的C端口.

是否可以在Linux设备驱动程序中使用protobufs?
显然,vanilla c代码无法正常工作,因为它会调用malloc等.是否有针对内核的protobufs实现?

如果解决方案有所下降,那么移植C库以在内核中使用需要多少努力?

奖金问题:使用Windows驱动程序编写时,答案是否有明显不同?

c driver protocol-buffers linux-kernel

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

为什么fmt.Println不能在Google应用引擎中运行

我使用谷歌应用引擎和golang构建了一个简单的Web应用程序.在下面的代码中,我使用fmt.Println两次打印出一些用于调试目的.我没有运行应用程序的问题.一切正常,除了终端上没有打印出来.

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    q := datastore.NewQuery("Post").Ancestor(goblogKey(c)).Order("-CreatedOn").Limit(10)

    //posts := make([]entity.Post, 0, 10)
    var posts []entity.Post

    if _, err := q.GetAll(c, &posts); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    fmt.Println(string(len(posts)) + "...........")

    postList := []dto.Post{}

    for _, val := range posts {
        newpost := dto.Post{
            Post:     val,
            BodyHTML: template.HTML(val.Body),
        }

        fmt.Println(val.Title)

        postList = append(postList, newpost)
    }

    page := dto.PageData{Title: "Home", Posts: postList}
    templates.ExecuteTemplate(w, "index", page)
}
Run Code Online (Sandbox Code Playgroud)

google-app-engine go

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

使用-fno-access-control进行单元测试

在单元测试时,我已经看到许多疯狂的方法来访问私有变量.我见过的最令人兴奋的是#define private public.

但是,我从未见过有人建议在编译器级别关闭私有变量.我一直以为你不能.我向许多开发人员抱怨过,如果你能告诉编译器退出这个文件,那么单元测试会容易得多.

然后我偶然发现-fno-access-control gcc编译器选项.这显然是单元测试的完美方式.您的原始源文件未经修改,没有为单元测试注入的朋友,没有使用奇怪的预处理器魔法重新编译.在编译单元测试时,只需轻按"无访问控制"开关即可.

我错过了什么吗?这是测试银弹的单位我希望是吗?

我看到的唯一缺点是该技术的gcc特定性质.但是,我假设MSVS有一个类似的标志.

c++ gcc unit-testing

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

单元测试构建文件

单元测试构建文件的最佳策略是什么?

我问的原因是我的公司生产高度可靠的嵌入式设备.软件补丁不是一种选择,因为它们使我们的客户花费数千来分发.因此,我们有非常严格的代码质量程序(单元测试,代码审查,可追溯性等).这些程序正在应用于我们的构建文件(autotools,如果你必须知道,我希望可惜),但如果感觉像一个黑客.

呃...项目编译......将构建文件标记为已审核并进行单元测试.

必须有一个更好的方法.想法?

unit-testing makefile autotools cmake scons

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

bool与非布尔运算符的行为

我真正想要的是一个|| =运算符.

old_value = old_value || possible_new_value;
old_value ||= possible_new_value;
Run Code Online (Sandbox Code Playgroud)

第二行是编译器错误(c ++没有|| =运算符).

那么我的其他选择是什么?

old_value += possible_new_value;
old_value |= possible_new_value;
Run Code Online (Sandbox Code Playgroud)

虽然我在讨论这个主题,但bool与其他非布尔运算符的行为如何?

-
-=
&
&=
...
Run Code Online (Sandbox Code Playgroud)

我可以凭经验验证这些,但我最感兴趣的是标准所说的内容.

c++ coding-style standards-compliance

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

Git类似于Hg的Bigfiles Extension?

我想要一些类似于Mercurial的Bigfiles Extensiongit中的东西(注意:我知道git-bigfiles,但这是无关的).

基本上我想在我的git存储库中存储大型二进制文件,但是当我进行克隆时,我不希望得到大型二进制文件的每个版本.当我签出包含那些大文件的特定修订时,我只想下载大二进制文件.

git version-control mercurial mercurial-bigfiles

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

使用OpenAL进行硬件加速音频解码

在使用OpenAL库时,是否可以使用iPhone的mp3和AAC的硬件加速解码?

我想如果可能的话,有两种可能的方法.
iPhone特定的OpenAL扩展.
iPhone API将音频解码为原始字节.

我有两个具体的用例.

  • 完全解码一个短的声音咬.
  • 分段解码较大的声音文件,以便它可以流式传输到OpenAL而不是一次性加载.

更新

男孩!没人能得到答案吗?Apple的NDA是否会纠结这些问题?这是怎么回事?当然,使用OpenAL的其他人希望获得更好的音频性能.

c++ iphone openal objective-c codec

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

将结构初始化为指针或不作为指针

type Vertex struct {
    X, Y float64
}

func main() {
    v := Vertex{3, 4}
    fmt.Println(v)

    d := &Vertex{3, 4}
    fmt.Println(d)
}
Run Code Online (Sandbox Code Playgroud)

http://play.golang.org/p/XluyUHL2y7

这两种初始化Vertex结构的方法有什么区别?

我知道第二个是指针分配,但我在实践中看不出这个解决方案的任何区别.

go

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