小编Aar*_*ron的帖子

将从元组派生的对象放入C++中的向量中

我想创建一个包含3个值的结构:一个字符串和两个整数.该字符串是必需的,但是int中的任何一个(或两个)都是可选的,如果未指定,则默认为-1.

但是,我想我会尝试使用std :: tuple,而不是使用结构.为了合并两个整数的可选性,我设置了一个"Trio"类,它继承自std :: tuple,如下所示:

#include <string>
#include <tuple>

class Trio : public std::tuple<std::string, int, int>
{
    public:

    explicit Trio(std::string const & name, int val1 = -1, int val2 = -1)
    :
        tuple(name, val1, val2)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我通过将一些Trio对象推入std :: vector来测试Trio类:

#include <vector>
int main(void)
{
    std::vector<Trio> trios;

    Trio trio("trio1", 1, 1);
    trios.push_back(trio);

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

它在Visual Studio 2010中给我以下错误:

>c:\program files (x86)\microsoft visual studio 10.0\vc\include\tuple(127):
    error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const
    std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1
    from 'const Trio' to …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance tuples vector c++11

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

为线性插值设置CUDA 2D"unsigned char"纹理

我有一个代表2D数组的无符号字符线性数组.我想将它放入CUDA 2D纹理并对其执行(浮点)线性插值,即,使纹理调用获取4个最近的无符号字符邻居,在内部将它们转换为float,在它们之间进行插值,并返回结果浮点值.

我在设置纹理并将其绑定到纹理参考时遇到一些困难.我已经阅读了CUDA参考手册和附录,但我没有运气.

下面是可运行的代码来设置和绑定1)浮点纹理和2)unsigned char纹理.浮点代码运行得很好.但是,如果将两个注释的unsigned char行取消注释到底部,则会引发"invalid argument"错误.

#include <cstdio>
#include <cuda_runtime.h>

typedef unsigned char uchar;

// Define (global) texture references; must use "cudaReadModeNormalizedFloat"
// for ordinal textures
texture<float, cudaTextureType2D, cudaReadModeNormalizedFloat> texRefFloat;
texture<uchar, cudaTextureType2D, cudaReadModeNormalizedFloat> texRefUChar;

// Define size of (row major) textures
size_t const WIDTH  = 1000;
size_t const HEIGHT = 1000;
size_t const TOT_PIX = WIDTH*HEIGHT;

int main(void)
{
   // Set texel formats
   cudaChannelFormatDesc descFloat = cudaCreateChannelDesc<float>();
   cudaChannelFormatDesc descUChar = cudaCreateChannelDesc<uchar>();

   // Choose to perform texture 2D linear interpolation …
Run Code Online (Sandbox Code Playgroud)

interpolation textures cuda

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

如何将向量向量传递给期望指向(原始)指针的函数

我有一个函数接受指向double的指针:

void Foo(double ** m);  // expects a 3x3 matrix of doubles
Run Code Online (Sandbox Code Playgroud)

是否有可能,通过适当的转换和诸如此类的方法,将std :: vector的std :: vector传递给double或者std :: array of std :: arrays of double?如果是这样,有人可以解释一下吗?

std::vector<std::vector<double>> v(3, std::vector<double>(3));
std::array<std::array<double, 3>, 3> a;
Run Code Online (Sandbox Code Playgroud)

如果函数只接受指向double的指针,那么这是可能的.(通过v.data()或a.data()).但是函数接口中指针的指针让我觉得这样的转换可能是不可能的.

谢谢,

亚伦

c++ pointers vector c++11

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

标签 统计

c++ ×2

c++11 ×2

vector ×2

cuda ×1

inheritance ×1

interpolation ×1

pointers ×1

textures ×1

tuples ×1