小编Sam*_*nha的帖子

如何使用类型名对结构进行前向声明?

我正在尝试在 C++ 中对具有类型名的结构进行前向声明。像这样的事情是完全有效的:

typedef struct foo foo;

struct foo{
    int f;
};
Run Code Online (Sandbox Code Playgroud)

我的结构只是有一个类型名,所以我尝试了这个:

template <typename T>
typedef struct mV<T> mV;

template <typename T>
struct mV{
   //contents of struct
};
Run Code Online (Sandbox Code Playgroud)

但是,我随后收到错误a typedef cannot be a templateexplicit specialization of undeclared template structredefinition of 'mV' as different kind of symbol。我该如何解决这个问题?

c++ struct typedef typename

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

有没有办法在不同范围内共享shared_ptr的一部分?

因此,如果您想共享shared_ptr过去元素中的所有内容x,您可以编写如下内容:

int main(){
    std::shared_ptr<float[]> _vals = std::make_unique<float[]>(70);
    for(uint32_t i = 0; i < 10; ++i)
        _vals[i] = i;
    //range from 2 - end of _vals
    // x = 2 in this case
    std::shared_ptr<float[]> _partial(_vals, &_vals[2]);
    
    for(uint32_t i = 0; i < 5; ++i)
        std::cout<<_partial[i]<<" ";
    std::cout<<std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以输出将是:

2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

所以_partial会指向从_vals.get() + 2到 的结尾_vals。但是,如果我想让它指向,例如(2-5), (70-end),我想知道是否可以分配地址来_partial完成此操作,该怎么办?例如,如果这有效:

2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试编译它,我会收到错误: …

c++ shared-ptr unique-ptr c++17

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

标签 统计

c++ ×2

c++17 ×1

shared-ptr ×1

struct ×1

typedef ×1

typename ×1

unique-ptr ×1