小编def*_*ode的帖子

如何为Go结构创建JSON

我正在尝试使用Marshal函数从Go结构创建JSON.创建的JSON不包含Person结构.
我错过了什么?

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

type Person struct {
    fn string
    ln string
}
type ColorGroup struct {
    ID     int
    Name   string
    Colors []string
    P      Person
}

per := Person{
    fn: "John",
    ln: "Doe",
}

group := ColorGroup{
    ID:     1,
    Name:   "Reds",
    Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
    P:      per,
}
b, err := json.Marshal(group)
if err != nil {
    fmt.Println("error:", err)
}
os.Stdout.Write(b)
Run Code Online (Sandbox Code Playgroud)

生成的输出如下:

{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"],"P":{}}
Run Code Online (Sandbox Code Playgroud)

我没有在输出中看到Person.
http://golang.org/pkg/encoding/json/#Marshal

json go

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

在使用时删除增强功能

我有一种情况,即boost :: function和boost :: bind(实际上是std :: tr1 :: function和bind)在被使用时被删除.这样安全吗?我通常会避免它,但有问题的代码有点根深蒂固,我唯一的另一个选择是添加一个新线程.

typedef function<int(int)> foo_type;

foo_type* global_foo = NULL;

int actual_foo( int i, Magic* m )
{
    delete global_foo;
    return m->magic(i);
}

int main()
{
     Magic m;
    global_foo = new foo_type( bind( &actual_foo, _1, &m );

    return (*global_foo)(10)
}
Run Code Online (Sandbox Code Playgroud)

绑定参数始终是普通的整数类型(实际代码中的int和指针),而不是引用.

c++ boost boost-bind c++11

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

C函数中的D回调

我正在D2为Lua 编写绑定.这是一个Lua头文件.

typedef int (*lua_CFunction) (lua_State *L);
Run Code Online (Sandbox Code Playgroud)

我假设等效的D2陈述是:

extern(C) alias int function( lua_State* L ) lua_CFunction;
Run Code Online (Sandbox Code Playgroud)

Lua还提供了api功能:

void lua_pushcfunction( lua_State* L, string name, lua_CFunction func );
Run Code Online (Sandbox Code Playgroud)

如果我想推送一个D2函数,它必须是extern(C)还是我可以使用该函数?

int dfunc( lua_State* L )
{
   std.stdio.writeln("dfunc");
}

extern(C) int cfunc( lua_State* L )
{
   std.stdio.writeln("cfunc");
}

lua_State* L = lua_newstate();
lua_pushcfunction(L, "cfunc", &cfunc); //This will definitely work.
lua_pushcfunction(L, "dfunc", &dfunc); //Will this work?
Run Code Online (Sandbox Code Playgroud)

如果我只能使用cfunc,为什么?我不需要做那样的事情C++.我可以将C++函数的地址传递给C一切正常工作.

lua binding d

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

如何优雅地链接

我有一段奇怪的代码.这很臭,但如果更清楚,我想不出方法.

我要做的是从左侧列表的尾部或右侧列表的头部删除最大的项目.我最终得到了这段代码.

if not left:
  right.pop(0)
elif not right:
  left.pop(-1):
elif len(left[-1]) < len(right[0]):
  right.pop(0)
else:
  left.pop(-1)
Run Code Online (Sandbox Code Playgroud)

条件的主体是彼此完全相同的,yuck.

是否有一种优雅的方法来重构此代码以最大限度地减少重复?

python

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

文本/模板问题Parse()与ParseFiles()

我正在尝试使用text/template包做一些简单的工作.模板顶部给出的样本就是我正在使用的样本.

如何编写'解析'文件以便template.ParseFiles()正确读取和执行它?

package main

import (
    "text/template"
    "os"
)

type Inventory struct {
    Material string
    Count    uint
}

func main() {
    sweaters := Inventory{"wool", 17}
    tmpl, err := template.New("test").Parse("{{.Count}} items are made of {{.Material}}")
    // tmpl, err := template.New("test").ParseFiles("file.txt")

    if err != nil { panic(err) }
    err = tmpl.Execute(os.Stdout, sweaters)
    if err != nil { panic(err) }
}

/*
Contents of file.txt:
{{.Count}} items are made of {{.Material}}

Error thrown:
panic: template: test:1: "test" is an …
Run Code Online (Sandbox Code Playgroud)

go go-templates

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

Go是否允许函数将另一个函数用作参数?

问题发生在Go代码的第17行.下面是python和Go中的程序,所以你可以看到我正在尝试做什么.Python工作,我的Go尝试都失败了.已经连续阅读了golang.org,谷歌也没有看到任何内容.

def my_filter(x):
  if x % 5 == 0:
    return True
  return False

#Function which returns a list of those numbers which satisfy the filter
def my_finc(Z, my_filter):

  a = []
  for x in Z:
    if my_filter(x) == True:
      a.append(x)
  return a

print(my_finc([10, 4, 5, 17, 25, 57, 335], my_filter))
Run Code Online (Sandbox Code Playgroud)

现在,Go版本我遇到了麻烦:

package main

import "fmt"

func Filter(a []int) bool {
    var z bool
    for i := 0; i < len(a); i++ {
        if a[i]%5 == 0 {
            z = true …
Run Code Online (Sandbox Code Playgroud)

parameters arguments nested function go

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

前向声明方法指针

我正在使用pimpl习语并想要引用前向声明类的一种方法.下面不是我正在做的,但使用相同的概念.

template< typename Class, void (Class::*Method)(void) >
struct Call
{
   Call( Class* c )
    : m_c(c)
   { }

   void operator()( void )
   {
      (m_c->*Method)();
   }

   Class* m_c;
};

class A
{
public:
   void foo( void )
   {
      std::cout << "A::foo\n";
   }
};

// this works
void do_foo( A* a )
{
   Call<A,&A::foo> c(a);
   c();
}

class B;
// this doesn't compile
extern void B::bar( void );

// this is what i'd ultimately like to do
void do_bar( B* b ) …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

Linux上的getfsstat()相当于什么?

问题说明了一切.我想要C函数调用,它返回已挂载文件系统的列表以及文件系统类型等相关信息.

linux filesystems mount

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

使用vim的最后一个参数:make命令

我有一个键映射来构建我的项目.

noremap <F5> :make<CR>
Run Code Online (Sandbox Code Playgroud)

这非常有效.但是我有时候只构建了一个项目.在这种情况下,我使用命令:make smaller_part来构建该片段.我也喜欢这个用例的一键映射.

noremap <S-F5> :make last_arguments()<CR>
Run Code Online (Sandbox Code Playgroud)

这可能吗?一个last_arguments()并不需要的功能.这就是我想象的解决方案.重要的是我点击了一个键然后运行:使用我上次给出的参数.

vim

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

CMake标题识别:

我目前正在使用CMake构建项目,我有以下问题:

我有一个库,比如'C',可执行文件'L'的文件需要使用(L中的文件调用C中库的头文件)

库和可执行文件都必须在同一个项目中构建,虽然它们都经过了CMake,L中的文件似乎看不到库C提供的头文件.我必须指定相对路径到头文件中的确切目标,这一点都不好,因为某些文件层次结构可能会在某个时间点发生变化.

我不确定使用什么类型的命令来使L文件直接能够看到C头,这样我就可以这样说

#include "display.h" 
Run Code Online (Sandbox Code Playgroud)

直接在L.我不想在整个地方复制标题,因为我有很多像L这样的文件.

我的Cmake文件如下所示:

对于库C(更接近文件夹层次结构的顶部):

FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
  MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})

#INCLUDE_DIRECTORIES(${CRANIOLIB_SOURCE_DIR}/include)

SET(cranioDir ${CMAKE_CURRENT_SOURCE_DIR})
SET(SOURCES 
 twoD.cxx 
 display.cxx 
 rotate.cxx 
 symmetry.cxx 
 normalize.cxx 
 real_sym_eigens.cxx 
 debugLib.cxx 
 readInputLib.cxx)
SET(cranioLib_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
ADD_LIBRARY(cranioLib ${SOURCES})
Run Code Online (Sandbox Code Playgroud)

对于可执行文件L:

FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
  MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})

INCLUDE_DIRECTORIES(${cranioDir})

ADD_EXECUTABLE(RotateSS RotateSideToSide.cxx)
TARGET_LINK_LIBRARIES(RotateSS vtkRendering cranioLib vtkHybrid vtkGraphics)

ADD_EXECUTABLE(RotateST RotateSideTwist.cxx)
TARGET_LINK_LIBRARIES(RotateST vtkRendering cranioLib vtkHybrid vtkGraphics)

ADD_EXECUTABLE(RotateUD RotateUpDown.cxx)
TARGET_LINK_LIBRARIES(RotateUD vtkRendering cranioLib vtkHybrid vtkGraphics)
Run Code Online (Sandbox Code Playgroud)

请注意,这些文件并不能完全完成这项工作 - 我需要一些帮助来确定CMake的"包含"功能,无法获得任何其他可以帮助我的技巧.

最好.

c++ cmake

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