小编0xb*_*00d的帖子

指向成员的指针的偏移量

template<class T, typename U> ptrdiff_t foo(T U::* m)
{
    // return offset
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何获得字段'm'的偏移量?我更喜欢使用am编译时表达式.

在此先感谢您的帮助.最好的祝福

c++ templates member-pointers

5
推荐指数
2
解决办法
3857
查看次数

分配器类型参数的C++设计模式

当将类型传递给要作为分配器的类时,C++ 03标准库使用简单的模板类型参数.这是可能的,因为模板在C++中的工作方式.但是,它并不是非常简单,您可能不知道类型定义应该是什么样子 - 特别是在非标准类型的情况下.

我认为使用适配器类instread可能是个好主意.我已经创建了一个示例来向您展示我的意思:

#ifndef HPP_ALLOCATOR_ADAPTOR_INCLUDED
#define HPP_ALLOCATOR_ADAPTOR_INCLUDED


#include <memory>


template<typename T>
struct allocator_traits;

template<typename T, class allocator_type = std::allocator<T>>
class allocator_adaptor;


template<>
struct allocator_traits<void>
{
    typedef std::allocator<void>::const_pointer const_pointer;
    typedef std::allocator<void>::pointer       pointer;
    typedef std::allocator<void>::value_type    value_type;
};

template<typename T>
struct allocator_traits
{
    typedef typename std::allocator<T>::const_pointer   const_pointer;
    typedef typename std::allocator<T>::const_reference const_reference;
    typedef typename std::allocator<T>::difference_type difference_type;
    typedef typename std::allocator<T>::pointer         pointer;
    typedef typename std::allocator<T>::reference       reference;
    typedef typename std::allocator<T>::size_type       size_type;
    typedef typename std::allocator<T>::value_type      value_type;
};


template<class allocator_type>
class allocator_adaptor<void, allocator_type>
    : public allocator_traits<void>
{ …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns stl allocator

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

使用参数包扩展调用具有可变参数的函数,但修改第i个参数

假设我们有一个功能

template<typename T, typename... Args>
T f(Args... args);
Run Code Online (Sandbox Code Playgroud)

我们想要调用f另一个函数

template<typename... Args>
void bar(Args... args) {
    // f(args1, ..., args(i-1), "modified argsi", args(i+1), ..., argsn);
}
Run Code Online (Sandbox Code Playgroud)

i为所有人修改-th参数(并保持其他参数不变)i = 1, ..., n.f将返回一个结果,我想将所有n结果存储在一个valarray.

我们怎么做?

c++ variadic-functions variadic-templates c++11

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

Vulkan 中的每个交换链图像、每个帧或每个命令池是否需要专用围栏/信号量?

我已经阅读了几篇关于 CPU-GPU(使用栅栏)和 GPU-GPU(使用信号量)同步机制的文章,但仍然无法理解我应该如何实现一个简单的渲染循环。

请看render()下面的简单函数。如果我这样做是正确的最低要求是,我们要确保的GPU-GPU同步vkAcquireNextImageKHRvkQueueSubmit并且vkQueuePresentKHR单一的信号量集image_available,并rendering_finished为我在下面的示例代码来完成。

然而,这真的有救吗?所有操作都是异步的。那么,即使来自前一次调用的信号请求尚未触发image_available,在随后的render()再次调用中“重用”信号量真的安全吗?我认为它不是,但是,另一方面,我们使用相同的队列(不知道图形和演示队列实际上是否相同是否重要)并且队列中的操作应该按顺序使用.. . 但如果我猜对了,它们可能不会“作为一个整体”被消费,并且可以重新排序......

第二件事是(同样,除非我遗漏了什么)我显然应该为每个交换链图像使用一个栅栏,以确保对对应于image_index调用的图像的操作render()已经完成。但这是否意味着我一定需要做一个

if (vkWaitForFences(device(), 1, &fence[image_index_of_last_call], VK_FALSE, std::numeric_limits<std::uint64_t>::max()) != VK_SUCCESS)
    throw std::runtime_error("vkWaitForFences");
vkResetFences(device(), 1, &fence[image_index_of_last_call]);
Run Code Online (Sandbox Code Playgroud)

在我打电话之前vkAcquireNextImageKHR?而我则需要专门image_availablerendering_finished每个交换链的图像信号量?或者每帧?或者也许每个命令缓冲区/池?我真的很困惑...


void render()
{
    std::uint32_t image_index;
    switch (vkAcquireNextImageKHR(device(), swap_chain().handle(),
        std::numeric_limits<std::uint64_t>::max(), m_image_available, VK_NULL_HANDLE, &image_index))
    {
    case VK_SUBOPTIMAL_KHR:
    case VK_SUCCESS:
        break;
    case VK_ERROR_OUT_OF_DATE_KHR:
        on_resized();
        return;
    default:
        throw std::runtime_error("vkAcquireNextImageKHR");
    }

    static VkPipelineStageFlags constexpr wait_destination_stage_mask …
Run Code Online (Sandbox Code Playgroud)

c++ 3d graphics vulkan

5
推荐指数
2
解决办法
469
查看次数

C#实现依赖于系统的整数

我需要定义一个依赖于系统的整数类型,以便与一些低级库相兼容.我已经设置了x86和x64项目配置,并为它们定义了条件编译符号(IA32和INTEL64).

所以,我想做以下事情:

#if IA32
    typedef int SysInt;
    typedef uint SysUInt;
#elif INTEL64
    typedef long SysInt;
    typedef ulong SysUInt;
#endif
Run Code Online (Sandbox Code Playgroud)

但是,由于typedef在C#中不可用,因此不起作用.实现这个的最佳选择是什么?

提前致谢.最好的祝福.

c# integer

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

成员运算符的C++ enable_if(或变通方法)

template<typename T>
struct foo
{
    T* p;
    foo(T* x) : p(x) {}
    ~foo() { if(p) delete p; }
    T& operator*() const { return *p; }
};

int main()
{
    foo<int>  i(new int);
    foo<void> v(new int);   // <= illegal use of type 'void'
}
Run Code Online (Sandbox Code Playgroud)

如果T = void,那么我不想实现运算符*().我怎样才能做到这一点?我不想专门化这个类,因为我班上还有很多其他的方法.

PS:请注意,这只是解释我的问题的一个例子.

c++ templates operators type-traits

4
推荐指数
2
解决办法
605
查看次数

实体框架0..1到0关系

class First
{
    [Key]
    public int Id { get; set; }
}

class Second
{
    [Key]
    public int Id { get; set; }

    public int? First_Id { get; set; }

    [ForeignKey("First_Id")]
    public First First { get; set; }
}

public class SecondMapping : EntityTypeConfiguration<Second>
{
    public SecondMapping () 
        : base()
    {
        this.HasOptional(s => s.First)
            .With ... ???
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个可能参考First.但是First从来没有提到Second.是否可以将此映射应用于Entity Framework 4.1?

编辑: 以前,这是我的解决方案:

this.HasOptional(s => s.First)
    .WithOptionalDependent()
    .WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)

第二个可以包含First的一个实例(取决于某种Usage-Attribute).首先不包含Second的任何实例.

c# entity-framework foreign-keys

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

如何将`std :: vector`成员变量移动到方法的调用者?

请考虑以下代码

class A
{
public:
    A(std::size_t d)
        : m_v(d)

    std::vector<double> operator()() {
        return m_v;
    }

private:
    std::vector<double> m_v;
};
Run Code Online (Sandbox Code Playgroud)

我想转移 m_v到调用者operator()而不是复制它.我需要做什么?只需编写return std::move(m_v)并将返回类型更改为std::vector<double>&&

c++ move c++11

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

每当使用constexpr指定调用的函数时,将委托方法声明为constexpr

请考虑以下课程

template<class T>
class foo
{
public:
    auto bar() { return m_t.bar(); }

private:
    T m_t;
};
Run Code Online (Sandbox Code Playgroud)

如果我们想foo<T>::bar在非投掷时T::bar不投掷,我们可以将其声明更改为

auto bar() noexcept(noexcept(m_t.bar())) { return m_t.bar(); }
Run Code Online (Sandbox Code Playgroud)

但是我们能做什么,如果我们想要foo<T>::bar指定constexpr何时T::bar指定constexpr

我们可以写

constexpr auto bar() noexcept(noexcept(m_t.bar())) { return m_t.bar(); }
Run Code Online (Sandbox Code Playgroud)

它会在两种情况下都有效吗?我用clang 3.7(C++ 17)测试了这个,似乎是这种情况,但我不确定编译器是否在这里正常工作.

c++ templates constexpr c++14 c++17

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

使用 Python 可视化二维点集

我是 Python 新手,想要执行一项相当简单的任务。我有一个二维点集,它作为二进制数据(即(x, y)坐标)存储在文件中,我想将其可视化。输出应如下图所示。

然而,我对这个主题的谷歌结果的数量感到不知所措。其中许多似乎用于三维点云可视化和/或大量数据点。因此,如果有人能为我的问题指出一个合适的解决方案,我将非常感激。

点集

编辑:点集包含在格式如下的文件中:

0.000000000000000   0.000000000000000
1.000000000000000   1.000000000000000
1
0.020375738732779   0.026169010160356
0.050815740313746   0.023209931647163
0.072530406907906   0.023975230642589
Run Code Online (Sandbox Code Playgroud)

第一个数据向量是单个“1”下方行中的数据向量;IE (0.020375738732779, 0.026169010160356)。如何将其读入 python 中的向量?我可以使用打开该文件f = open("pointset file")

python visualization visual-studio

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