我正在寻找一个混合元容器/容器类.我想要一个将编译时类型映射到运行时值的类.代码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++/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堆栈是否正确解开.可能会出错吗?
我使用谷歌应用引擎和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) 在单元测试时,我已经看到许多疯狂的方法来访问私有变量.我见过的最令人兴奋的是#define private public.
但是,我从未见过有人建议在编译器级别关闭私有变量.我一直以为你不能.我向许多开发人员抱怨过,如果你能告诉编译器退出这个文件,那么单元测试会容易得多.
然后我偶然发现-fno-access-control gcc编译器选项.这显然是单元测试的完美方式.您的原始源文件未经修改,没有为单元测试注入的朋友,没有使用奇怪的预处理器魔法重新编译.在编译单元测试时,只需轻按"无访问控制"开关即可.
我错过了什么吗?这是测试银弹的单位我希望是吗?
我看到的唯一缺点是该技术的gcc特定性质.但是,我假设MSVS有一个类似的标志.
单元测试构建文件的最佳策略是什么?
我问的原因是我的公司生产高度可靠的嵌入式设备.软件补丁不是一种选择,因为它们使我们的客户花费数千来分发.因此,我们有非常严格的代码质量程序(单元测试,代码审查,可追溯性等).这些程序正在应用于我们的构建文件(autotools,如果你必须知道,我希望可惜),但如果感觉像一个黑客.
呃...项目编译......将构建文件标记为已审核并进行单元测试.
必须有一个更好的方法.想法?
我真正想要的是一个|| =运算符.
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)
我可以凭经验验证这些,但我最感兴趣的是标准所说的内容.
我想要一些类似于Mercurial的Bigfiles Extension的git中的东西(注意:我知道git-bigfiles,但这是无关的).
基本上我想在我的git存储库中存储大型二进制文件,但是当我进行克隆时,我不希望得到大型二进制文件的每个版本.当我签出包含那些大文件的特定修订时,我只想下载大二进制文件.
在使用OpenAL库时,是否可以使用iPhone的mp3和AAC的硬件加速解码?
我想如果可能的话,有两种可能的方法.
iPhone特定的OpenAL扩展.
iPhone API将音频解码为原始字节.
我有两个具体的用例.
男孩!没人能得到答案吗?Apple的NDA是否会纠结这些问题?这是怎么回事?当然,使用OpenAL的其他人希望获得更好的音频性能.
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结构的方法有什么区别?
我知道第二个是指针分配,但我在实践中看不出这个解决方案的任何区别.
c++ ×5
go ×2
unit-testing ×2
autotools ×1
c ×1
cmake ×1
codec ×1
coding-style ×1
destructor ×1
driver ×1
gcc ×1
git ×1
iphone ×1
linux-kernel ×1
lua ×1
makefile ×1
mercurial ×1
objective-c ×1
openal ×1
scons ×1
templates ×1