小编par*_*iad的帖子

Lambda函数,在编译时确定参数的数量

我想声明一个具有N个参数的lambda函数,其中N是模板参数.就像是...

template <int N>
class A {
    std::function<void (double, ..., double)> func;
                        // exactly n inputs
};
Run Code Online (Sandbox Code Playgroud)

我想不出用元函数范式来做这个的方法.

c++ lambda templates c++11 c++14

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

使用move-capture返回lambda函数

我有一个函数,它使用move-capture构造一个lambda函数(仅限C++ 1y)并返回它.

#include <iostream>
#include <functional>
#include <memory>

using namespace std;

function<int ()> makeLambda(unique_ptr<int> ptr) {
    return [ ptr( move(ptr) ) ] () {
        return *ptr;
    };
}

int main() {
    // Works
    {
        unique_ptr<int> ptr( new int(10) );
        auto function1 = [ ptr(move(ptr)) ] {
            return *ptr;
        };
    }

    // Does not work
    {
        unique_ptr<int> ptr( new int(10) );
        auto function2 = makeLambda( std::move(ptr) );
    }

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

然而,似乎在返回时,unique_ptr<int>调用了复制构造函数.为什么这个/我怎么能绕过这个?

链接到粘贴:http: //coliru.stacked-crooked.com/a/b21c358db10c3933

c++ lambda c++14

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

Github-pages:下载发布

我有一个 GitHub 存储库。

虽然我已经发布了该项目,但页面上没有出现相应的下载链接(我使用 gh-pages 向导创建此页面)。

有什么建议可以获取通常的“下载最新的 tarball/zip”下载链接?

github github-pages

5
推荐指数
0
解决办法
1186
查看次数

C++"虚拟参数"

请考虑以下代码:

class A {
public:
    virtual ~A() {}
};

class AA : public A {
};

////////////////////////////////////////

class B {
public:
    virtual void f(const A &a) {
        // code for A
    }
};

class BB : public B {
public:
    virtual void f(const AA &a) {
        // code for AA
    }
};

////////////////////////////////////////

int main() {
    A *a = new AA;
    B *b = new BB;

    b->f(*a);
}
Run Code Online (Sandbox Code Playgroud)

显然,构造vtable使得当执行上述操作时// code for A.我正在寻找一种能够执行的方法// code for AA.

动机是这是一个代码库,最终用户通常必须编写BB形式的类,我希望这个过程尽可能简单(即用户不必使用RTTI找出他们正在处理的A派生类).任何想法(以及来自任何版本的C++标准的伏都教)都表示赞赏.

c++ virtual-functions

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

CUDA*.cpp文件

有没有一个标志我可以通过nvcc来处理.cpp文件,就像它.cu文件一样?我宁愿不做一个cp x.cpp x.cu; nvcc x.cu; rm x.cu.

我问,因为我在我的库中有cpp文件,我想根据传递给Makefile的特定标志使用/不使用CUDA进行编译.

cuda nvcc

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

可变参数(包大小为 N)和一个默认参数

N成为 type 的模板参数std::size_t。我希望能够以两种方式为我的类调用构造函数:

A a(x1, x2, x3, ..., xN)
Run Code Online (Sandbox Code Playgroud)

A a(x1, x2, x3, ..., xN, xN1)
Run Code Online (Sandbox Code Playgroud)

其中xi变量都是相同的类型。我的第一个想法是这样做:

template <std::size_t N>
struct A
{
     template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
     A(Args ...args) {
         f(args...); // where f is some function
     }

     template <typename ...Args, typename = typename std::enable_if<N+1 == sizeof...(Args), void>::type>
     A(Args ...args) {
         // run f on the first N arguments
         // run g on the last argument (selection …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming template-meta-programming c++11

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

具有n个参数的可变参数模板

我想制作一个具有N个参数的可变参数模板,其中N也是模板参数.例如,

template <int N, typename T[N]>
void function(T t[N]) {
    // do stuff with t[0] through t[N-1]
}
Run Code Online (Sandbox Code Playgroud)

(我意识到上面的语法不正确)

我知道实现这一目标的一种方法是使用static_asserton在sizeof...(ArgsT)哪里ArgsT是可变参数模板定义(即template <typename ...ArgsT>).

我只是想知道是否有更好的方法,不一定涉及static_assert.

c++ templates c++11

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

Cython 中动态大小的对象数组

如何在Cython 中执行与以下 C++ 代码等效的代码?

typedef vector<double> dvec;
dvec *arr = new dvec[n]; // n is an unsigned int (unknown at compile time)

// do something with arr; for example...
arr[0].push_back(10);
cout << arr[0][0] << endl;
Run Code Online (Sandbox Code Playgroud)

我试图为 n 个向量分配内存,但是我不知道如何在 Cython 中进行新的放置。任何帮助将不胜感激。

c++ python cython

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