小编mel*_*lmi的帖子

具有已知类型的可变数量参数的函数,c ++ 11方式

我已经知道stdarg.h在c ++中使用带有变量参数的函数的方法,例如这里讨论的.我也知道C++ 11标准都有所解释的可变参数模板这里.

但是在前面提到的两种方案中,我们都不知道(并且我们不能强制)参数类型在编译时间afaik.我正在寻找的是将已知类型的变量参数传递给函数.我认为这可以做到,因为我在这里读到它:

变量模板,也可用于创建带有可变数量参数的函数,通常是更好的选择,因为它们不对参数的类型施加限制,不执行整数和浮点升级,并且类型安全.

可能吗?如果是,我该怎么做?

c++ templates variadic-functions variadic-templates c++11

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

用于BinaryReader的EndOfStream

BinaryReader没有EndOfStream属性.使用以下代码检查是否到达流的末尾是否安全?

reader.BaseStream.Length>reader.BaseStream.Position

c# streaming binaryreader

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

如何使CDT/Eclipse与C++ 11线程一起使用?

我试图在Eclipse中测试一个C++ 11线程的例子.但是在运行程序时我收到了这条消息:

在抛出'std :: system_error'的实例后调用终止what():不允许操作'

我的系统:ubuntu + gcc 4.7

程序:

#include <iostream>
#include <thread>

void worker()
{
    std::cout << "hello from worker" << std::endl;
}

int main(int argc, char **argv)
{
    std::thread t(worker);
    t.join();
}
Run Code Online (Sandbox Code Playgroud)

......是的,我把-std=c++11-pthread里面C/C++ Build -> Settings -> Tool Settings -> Cross G++ Compiler -> Miscellaneous -> Other Flags.

任何意见?

c++ multithreading eclipse-cdt c++11

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

如何从连接中使用Entity Framework + PostgreSQL?

我已经看到线程讨论使用Entity Framework和PostgreSQL与官方指令.这些指令需要gacutil针对每个安装运行,这对于部署目的而言并不那么方便.

我想要做的是将PostgreSQL连接直接传递给DbContext构造函数.这对我来说已经足够了,因为我将在CodeFirst没有设计师的情况下使用.这就是我做的:

public class Context : DbContext
{
    Context(System.Data.Common.DbConnection connection)
        : base(connection, true)
    {
    }

    public static Context CreateContext()
    {
        NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=********;Database=xxx;");
        conn.Open();

        return new Context(conn);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是使用这种方法,我收到了一条NotSupportedException消息:

无法确定连接类型为"Npgsql.NpgsqlConnection"的提供程序名称.

我该怎么办?

npgsql entity-framework-4 postgresql-9.1

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

使用包含托管代码指针的Fortran类型

我将使用Fortran DLL,其中包含具有以下签名的类型(简化):

  TYPE MyType
    INTEGER(4) :: ii
    REAL(8)    :: rr
    INTEGER(4) :: n_a0
    INTEGER(4) :: n_a1
    INTEGER(4), POINTER :: a0(:)
    REAL(8)   , POINTER :: a1(:)
  END TYPE 
Run Code Online (Sandbox Code Playgroud)

显然,这种类型包含整数和双精度的指针.我通过以下方法从另一个Fortran代码顺利访问此类型.

SUBROUTINE MySub(x)
TYPE(MyType) :: x
Run Code Online (Sandbox Code Playgroud)

我的目标是使用它MyTypeMySub通过C#代码.为此,我在C#代码中定义了一个结构,如下所示:

struct MyType
{
    public int ii;
    public double rr;

    public int n_a0;
    public int n_a1;

    public int[] a0;
    public double[] a1;
}
Run Code Online (Sandbox Code Playgroud)

并使用以下方法访问它:

    [DllImport("my_test.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern void MySub(ref MyType t);
Run Code Online (Sandbox Code Playgroud)

问题是MySub访问非数组成员时一切正常.但是当它试图访问我得到的数组元素时AccessViolationException.我该怎么做才能解决这个问题?

c# interop fortran marshalling fortran-iso-c-binding

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