小编Mor*_*enn的帖子

如何在Python ctypes中处理C++返回类型std :: vector <int>?

我找不到ctypes如何弥合std::vector和Python 之间的差距; 没有在互联网上提到的组合.这是不好的做法,它不存在还是我错过了什么?

C++:xxx.cpp

#include <fstream>
#include <string>
using namespace std;
extern "C" std::vector<int> foo(const char* FILE_NAME)
{
    string line;
    std::vector<int> result;
    ifstream myfile(FILE_NAME);
    while (getline(myfile, line)) {
      result.push_back(1);
    }

    return(result);
}
Run Code Online (Sandbox Code Playgroud)

Python: xxx.py

import ctypes
xxx = ctypes.CDLL("./libxxx.so")
xxx.foo.argtypes = ??????
xxx.foo.restype = ??????
Run Code Online (Sandbox Code Playgroud)

c++ python ctypes

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

从派生类初始化列表调用基类构造函数的顺序

struct B { int b1, b2;  B(int, int); };
struct D : B {
  int d1, d2;
// which is technically better ?
  D (int i, int j, int k, int l) : B(i,j), d1(k), d2(l) {} // 1st Base
// or
  D (int i, int j, int k, int l) : d1(k), d2(l), B(i,j) {} // last Base
};
Run Code Online (Sandbox Code Playgroud)

以上只是伪代码.实际上我想知道调用基础构造函数顺序是否重要? 是否有任何不良行为(特别是拐角案件)由任何案件引起?我的问题是更多的技术方面,而不是编码风格.

c++ constructor base-class initialization-list

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

std :: common_type实现

为了看看它是如何工作的,我查看std::common_type了头文件中的libstdc ++实现type_traits.我不得不承认我并不真正理解它是如何运作的.这里是:

/// common_type
template<typename... _Tp>
    struct common_type;

template<typename _Tp>
    struct common_type<_Tp>
    { typedef _Tp type; };

template<typename _Tp, typename _Up>
    struct common_type<_Tp, _Up>
    { typedef decltype(true ? declval<_Tp>() : declval<_Up>()) type; };

template<typename _Tp, typename _Up, typename... _Vp>
    struct common_type<_Tp, _Up, _Vp...>
    {
        typedef typename
        common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
    };
Run Code Online (Sandbox Code Playgroud)

我很清楚第一,第二和第四声明如何运作.但是,我无法理解第三个声明的工作原理.有人可以尝试解释这里使用的机制吗?

c++ g++ type-traits c++11

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

找不到taskdef ant任务

全部 -

我正在按照此页面上最简单的说明操作:

http://ant.apache.org/manual/develop.html

但是,当我尝试执行目标"main"时,我在netbeans中遇到此错误:

taskdef class dec102012.MyAntTask cannot be found using the classloader AntClassLoader[]
Run Code Online (Sandbox Code Playgroud)

但是这个错误没有意义,因为扩展"Task"的新Java类看起来像这样:

package dec102012;

import org.apache.tools.ant.BuildException;

public class MyAntTask extends org.apache.tools.ant.Task{
    private String msg;

    // The method executing the task
    public void execute() throws BuildException {
        System.out.println(msg);
    }

    // The setter for the "message" attribute
    public void setMessage(String msg) {
        this.msg = msg;
    }
}
Run Code Online (Sandbox Code Playgroud)

build.xml中的相关部分如下所示:

<taskdef name="mytask" classname="dec102012.MyAntTask" classpath="dec102012"/>

<target name="main">
    <mytask message="Hello World! MyVeryOwnTask works!"/>
</target>
Run Code Online (Sandbox Code Playgroud)

java ant task

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

clang c11 threads.h未找到

我试图在xcode中设置一个c11线程示例...但它似乎没有threads.h标头,虽然它没有抱怨这里描述的宏:
http://www.open-std.组织/ JTC1/SC22/WG14/WWW /文档/ n1570.pdf

__STDC_NO_THREADS__整数常量1,用于指示实现不支持<threads.h>标头.

显示方言 显示错误

c xcode clang c11 threads.h

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

静态断言和SFINAE

考虑一下:

template <typename T>
struct hash
{
     static_assert(false,"Not implemented.");
};

struct unhashable {};

template <typename T>
auto test(const T &t) -> decltype((*(hash<T> const *)nullptr)(t),int);

void test(...);

int main()
{
    std::cout << std::is_same<decltype(test(std::declval<unhashable>())),void>::value;
}
Run Code Online (Sandbox Code Playgroud)

除了显然缺少标题,这应该编译吗?

换句话说,我问的是,如果在推断重载函数模板的返回值的同时触发尾随decltype内部的静态断言失败是否要求停止编译,或者是否只是丢弃了重载.

在gcc 4.7上,编译失败.我很积极,虽然这将在gcc 4.8中编译好(但在此刻无法检查).谁是对的?

c++ static-assert sfinae c++11

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

`std :: make_shared <POD>()`值是否初始化了我的POD?

std::make_shared<POD>()值是否初始化了我的POD?

如果是,这是否由标准保证?

如果没有(我怀疑),有没有办法做到这一点?我想std::make_shared<POD>(POD())会这样做但是我应该做什么?

c++ shared-ptr c++11

10
推荐指数
3
解决办法
908
查看次数

std :: queue的基于范围的循环

我正试图std::vector在我的项目中寻找替代品,我发现这std::queue就是我正在寻找的东西.

我有很多range-based loop用于迭代的函数,我试图尽可能地维护它.

我尝试编译一个range-based loopin std::queue但我得到的只是编译错误

错误:没有匹配函数来调用'begin(std :: queue&)'

std::queue支持范围基本循环?

我确实尝试过,Google search但没有找到任何有关此问题的话题.

更新:

我的编译器是 GCC v4.7.1

-std=c++11 已启用

这是错误的测试代码:

std::queue<int> Q;

for (int i = 0;i < 10; ++i)
    Q.push(i);

std::cout << "\nqueue contains: ";
for (auto i : Q)
    std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)

c++ queue c++11

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

转发声明constexpr变量模板

我试图constexpr像这样向前声明一个变量模板:

template<typename>
constexpr std::size_t iterator_category_value;
Run Code Online (Sandbox Code Playgroud)

我们的目标是记录每一项专业都应该是,constexpr但我必须承认,我从未检查过它是否合法,而且g ++对它很满意.但是,当我尝试使用clang ++编译此spinnet时,我收到以下错误:

error: default initialization of an object of const type 'const std::size_t' (aka 'const unsigned long')
    constexpr std::size_t iterator_category_value;
                          ^
                                                  = 0
Run Code Online (Sandbox Code Playgroud)

错误是有道理的,删除constexpr使它消失,所以这不是一个真正的问题.但是,我现在很好奇:标准是否允许constexpr对变量模板进行此类前向声明,还是非法?g ++和clang ++似乎不同意,我想知道如果需要我应该在哪里提交错误报告.

他们都抱怨一个前向声明的constepxr变量,它不是一个变量模板,所以变量模板上下文似乎是编译器不同意的原因.

c++ language-lawyer constexpr variable-templates c++14

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

最佳Batcher奇偶合并网络的大小不同于2 ^ n

这些天,我一直在尝试使用最少数量的比较交换单元(最大尺寸,而不是深度)实现最大尺寸为32的分拣网络.截至目前,我已经能够使用以下资源来生成我的网络:

纸张找到更好的排序网络通过Baddar给出已知有需要用于分拣网络0〜32比较-交换单元的最小数目(未最多到时间Valsalam和Miikkulainen为尺寸17,18,19提供更好的算法, 20,21和22)以及用于查找它们的方法:基本上,必须将数组拆分为两个排序,然后使用最知名的排序网络对这些大小进行排序,然后使用奇偶合并网络合并它们(这对应于Batcher的奇偶合并的合并步骤).

维基百科页面为Batcher的奇偶合并提供了以下Python实现:

def oddeven_merge(lo, hi, r):
    step = r * 2
    if step < hi - lo:
        yield from oddeven_merge(lo, hi, step)
        yield from oddeven_merge(lo + r, hi, step)
        yield from [(i, i + r) for i in range(lo + r, hi - r, step)]
    else:
        yield (lo, lo + r)

def oddeven_merge_sort_range(lo, hi):
    """ sort the part of x with …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm merge sorting-network

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