我找不到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) 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)
以上只是伪代码.实际上我想知道调用基础构造函数的顺序是否重要? 是否有任何不良行为(特别是拐角案件)由任何案件引起?我的问题是更多的技术方面,而不是编码风格.
为了看看它是如何工作的,我查看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)
我很清楚第一,第二和第四声明如何运作.但是,我无法理解第三个声明的工作原理.有人可以尝试解释这里使用的机制吗?
全部 -
我正在按照此页面上最简单的说明操作:
http://ant.apache.org/manual/develop.html
但是,当我尝试执行目标"main"时,我在netbeans中遇到此错误:
Run Code Online (Sandbox Code Playgroud)taskdef class dec102012.MyAntTask cannot be found using the classloader AntClassLoader[]
但是这个错误没有意义,因为扩展"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) 我试图在xcode中设置一个c11线程示例...但它似乎没有threads.h标头,虽然它没有抱怨这里描述的宏:
http://www.open-std.组织/ JTC1/SC22/WG14/WWW /文档/ n1570.pdf
__STDC_NO_THREADS__整数常量1,用于指示实现不支持<threads.h>标头.

考虑一下:
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中编译好(但在此刻无法检查).谁是对的?
std::make_shared<POD>()值是否初始化了我的POD?
如果是,这是否由标准保证?
如果没有(我怀疑),有没有办法做到这一点?我想std::make_shared<POD>(POD())会这样做但是我应该做什么?
我正试图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) 我试图constexpr像这样向前声明一个变量模板:
template<typename>
constexpr std::size_t iterator_category_value;
Run Code Online (Sandbox Code Playgroud)
我们的目标是记录每一项专业都应该是,constexpr但我必须承认,我从未检查过它是否合法,而且g ++对它很满意.但是,当我尝试使用clang ++编译此spinnet时,我收到以下错误:
Run Code Online (Sandbox Code Playgroud)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
错误是有道理的,删除constexpr使它消失,所以这不是一个真正的问题.但是,我现在很好奇:标准是否允许constexpr对变量模板进行此类前向声明,还是非法?g ++和clang ++似乎不同意,我想知道如果需要我应该在哪里提交错误报告.
他们都抱怨一个前向声明的constepxr变量,它不是一个变量模板,所以变量模板上下文似乎是编译器不同意的原因.
这些天,我一直在尝试使用最少数量的比较交换单元(最大尺寸,而不是深度)实现最大尺寸为32的分拣网络.截至目前,我已经能够使用以下资源来生成我的网络:
排序网络0到16:Perl的Algorithm::Networksort模块采用"最佳"算法.不幸的是,它只提供最知名的网络直到16号.
排序网络17至23:使用对称和进化搜索来最小化 Valsalam和Miikkulainen的排序网络.
纸张找到更好的排序网络通过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)