我想创建一个包含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) 我有一个代表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) 我有一个函数接受指向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()).但是函数接口中指针的指针让我觉得这样的转换可能是不可能的.
谢谢,
亚伦