小编eta*_*ion的帖子

从dll导出包含std :: objects(vector,map等)的类

我试图从包含std :: vectors和std :: strings等对象的DLL导出类 - 整个类通过以下方式声明为dll导出:

    class DLL_EXPORT FontManager
{
Run Code Online (Sandbox Code Playgroud)

问题是,对于复杂类型的成员,我收到此警告:

警告C4251:'FontManager :: m__fonts':类'std :: map <_Kty,_Ty>'需要让'FontManager'类的客户端使用dll接口[_Kty = std :: string,_Ty = tFontInfoRef ]

我可以通过在它们之前放置以下前向类声明来删除一些警告,即使我没有更改成员变量本身的类型:

template class DLL_EXPORT std::allocator<tCharGlyphProviderRef>;
template class DLL_EXPORT std::vector<tCharGlyphProviderRef,std::allocator<tCharGlyphProviderRef> >;
std::vector<tCharGlyphProviderRef> m_glyphProviders;
Run Code Online (Sandbox Code Playgroud)

看起来像前导声明"注入"DLL_EXPORT编译成员时,它是否安全?当客户端编译此标头并使用他身边的std容器时,它是否真的会改变任何东西?它是否会在将来使用这样的容器DLL_EXPORT(并且可能不是内联的?)?它是否真的解决了警告试图警告的问题?

这个警告是我应该担心的,还是最好在这些结构的范围内禁用它?客户端和dll将始终使用相同的库和编译器集构建,并且这些只是标题类...

我正在使用Visual Studio 2003和标准STD库.

----更新----

我想更多地针对你,因为我看到答案是一般性的,这里我们讨论的是std容器和类型(例如std :: string) - 也许问题确实是:

我们是否可以通过相同的库标题禁用客户端和dll可用的标准容器和类型的警告,并像处理int或任何其他内置类型一样处理它们?(它确实似乎在我身边正常工作.)如果可以,我们可以做到这一点的条件是什么?

或者应该禁止使用这样的容器,或者至少要特别小心,以确保没有赋值操作符,复制构造函数等内联到dll客户端?

一般来说,我想知道你是否觉得设计一个具有这些对象的dll接口(例如使用它们将东西作为返回值类型返回到客户端)是一个好主意或不是,为什么 - 我想要这个功能的"高级"接口......也许最好的解决方案是Neil Butterworth建议的 - 创建一个静态库?

c++ dll visual-studio

59
推荐指数
5
解决办法
5万
查看次数

IEEE是否为std :: map和std :: set浮动有效的键类型?

背景

对关键容器的键类型(例如std :: map)的比较器的要求是它对键类型的元素施加严格的弱顺序.

对于给定的比较器,comp(x, y)我们定义equiv(x, y) = !comp(x, y) && !comp(y, x).严格弱势秩序
的要求comp(x, y)

  1. 不可反复性(!comp(x, x)适合所有人x)
  2. 排序的传递(如果comp(a, b)comp(b, c)comp(a, c)).
  3. 等价的传递性(如果equiv(a, b)equiv(b, c)然后equiv(a, c))

std::less<float>(默认比较器)使用operator<,因为没有创建严格的弱顺序NaN.由于x < NaNNaN < x是全是假的x,NaN就相当于这个比较下的所有花车,这打破条件#3:equiv(1.0, NaN)equiv(NaN, 2.0),但不会equiv(1.0, 2.0).对于除NaN之外的IEEE浮点数,它是一个严格的弱顺序(其中每个数字都有自己的等价类,除了0-0).

这个问题

这是否意味着C++标准不允许使用IEEE浮点数(和(长)双精度数)作为关联容器中的键类型,因为上述问题,即使我确保NaN永远不会插入到容器中?我不太确定 …

c++ map set ieee-754

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

使用PyTorch生成新图像

我正在研究GAN我已经完成了一门课程,它给了我一个程序的例子,该程序根据输入的例子生成图像.

这个例子可以在这里找到:

https://github.com/davidsonmizael/gan
Run Code Online (Sandbox Code Playgroud)

所以我决定使用它来生成基于面部正面照片数据集的新图像,但我没有取得任何成功.与上面的示例不同,代码仅生成噪声,而输入具有实际图像.

实际上我没有任何关于我应该改变什么以使代码指向正确方向并从图像中学习的线索.我没有更改示例中提供的代码的单个值,但它不起作用.

如果有人能帮助我理解这一点,并指出我正确的方向将是非常有帮助的.提前致谢.

我的判断者:

class D(nn.Module):

    def __init__(self):
        super(D, self).__init__()
        self.main = nn.Sequential(
                nn.Conv2d(3, 64, 4, 2, 1, bias = False),
                nn.LeakyReLU(0.2, inplace = True),
                nn.Conv2d(64, 128, 4, 2, 1, bias = False),
                nn.BatchNorm2d(128),
                nn.LeakyReLU(0.2, inplace = True),
                nn.Conv2d(128, 256, 4, 2, 1, bias = False),
                nn.BatchNorm2d(256),
                nn.LeakyReLU(0.2, inplace = True),
                nn.Conv2d(256, 512, 4, 2, 1, bias = False),
                nn.BatchNorm2d(512),
                nn.LeakyReLU(0.2, inplace = True),
                nn.Conv2d(512, 1, 4, 1, 0, bias = False),
                nn.Sigmoid()
                )

    def forward(self, input): …
Run Code Online (Sandbox Code Playgroud)

python neural-network pytorch

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

std :: make_index_sequence和std :: index_sequence的详细信息

我很喜欢增加可变参数模板,并开始摆弄这个新功能.我试图了解std::index_sequences 的实现细节(用于元组实现).我看到那里的示例代码,但我真的想要逐步解释如何std::index_sequence编码和每个阶段的元编程主题.想真的傻了:)

c++ templates template-meta-programming variadic-templates c++14

15
推荐指数
2
解决办法
8214
查看次数

如何快速从已排序的向量中获取已排序的子向量

我有这样的数据结构:

struct X {
  float value;
  int id;
};
Run Code Online (Sandbox Code Playgroud)

那些矢量(大小为N(思考100000),按排序(在程序执行期间保持不变):

std::vector<X> values;
Run Code Online (Sandbox Code Playgroud)

现在,我想写一个函数

void subvector(std::vector<X> const& values, 
               std::vector<int> const& ids, 
               std::vector<X>& out /*, 
               helper data here */);
Run Code Online (Sandbox Code Playgroud)

填充所述用的排序子集的参数由所传递的给定的,IDS(大小中号 < Ñ(约0.8倍Ñ)),快速(存储器是不是一个问题,这将被重复进行的,因此构建lookuptables(该来自函数参数的辅助数据)或只做一次的其他东西完全没问题.

到目前为止我的解决方案:
构建可查找的lut包含id - > offset in values(准备,所以常量运行时)
创建std::vector<X> tmp,大小N,填充 每个id的无效ID(线性为N)
,复制values[lut[id]]tmp[lut[id]](M中的线性)
循环tmp,将项目复制到输出(N中的线性) …

c++ sorting vector large-data

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

OpenCV findContours函数问题

我试图在OpenCV中使用findContours函数,但VS 2008给出了一个错误说:

OpenCV错误:未知函数中的错误标志(参数或结构字段)(无法识别或不支持的数组类型),文件........\ocv\opencv\src\cxcore\cxarr ay.cpp,第2476行

此应用程序已请求Runtime以不寻常的方式终止它.有关更多信息,请联系应用程序的支持团队.按任意键继续 ...

这是代码:

Mat_<Vec<float,3>> originalimage;

Mat_<Vec<float,3>> resultingimage;

vector<vector<cv::Point>> v;

originalimage = cv::imread("Original.ppm");

cv::findContours(originalimage,v,CV_RETR_LIST,CV_CHAIN_APPROX_NONE);
Run Code Online (Sandbox Code Playgroud)

提前致谢

c++ opencv computer-vision visual-studio

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

在Python中实现Adagrad

我正在尝试用Python实现Adagrad.出于学习目的,我使用矩阵分解作为示例.我将使用Autograd来计算渐变.

我的主要问题是实施是否正常.

问题描述

给定具有一些缺失条目的矩阵A(M×N),分别分解为具有大小(M xk)和(k XN)的W和H. 目标是使用Adagrad学习W和H. 我将遵循本指南的Autograd实现.

注意:我非常清楚基于ALS的实现非常适合.我只是将Adagrad用于学习目的

习惯进口

import autograd.numpy as np
import pandas as pd
Run Code Online (Sandbox Code Playgroud)

创建要分解的矩阵

A = np.array([[3, 4, 5, 2],
                   [4, 4, 3, 3],
                   [5, 5, 4, 3]], dtype=np.float32).T
Run Code Online (Sandbox Code Playgroud)

掩盖一个条目

A[0, 0] = np.NAN
Run Code Online (Sandbox Code Playgroud)

定义成本函数

def cost(W, H):
    pred = np.dot(W, H)
    mask = ~np.isnan(A)
    return np.sqrt(((pred - A)[mask].flatten() ** 2).mean(axis=None))
Run Code Online (Sandbox Code Playgroud)

分解参数

rank = 2
learning_rate=0.01
n_steps = 10000
Run Code Online (Sandbox Code Playgroud)

成本梯度与W和H相比

from autograd import grad, multigrad
grad_cost= multigrad(cost, argnums=[0,1])
Run Code Online (Sandbox Code Playgroud)

主要的Adagrad例程(需要检查)

shape = …
Run Code Online (Sandbox Code Playgroud)

python numpy pytorch autograd

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

当工件是库且标志影响 C 或 C++ 标头时,功能标志/切换

关于功能标志/切换以及为什么要使用它们存在相当多的讨论,但大多数关于实现它们的讨论都围绕(网络或客户端)应用程序进行。如果您的产品/工件是 C 或 C++ 库,并且您的公共标头受标志影响,您将如何实现它们?

“天真的”做法并没有真正起作用:

/// Does something
/**
 * Does something really cool
#ifdef FEATURE_FOO
 * @param fooParam describe param for foo
#endif
 */
void doSomethingCool(
#ifdef FEATURE_FOO
    int fooParam = 42
#endif
);
Run Code Online (Sandbox Code Playgroud)

您不会想运送这样的东西。

  • 您发布的库是针对特定功能标志组合构建的,客户端不需要#define相同的功能标志来使事情正常工作
  • 你的公共标头中的 ifdef 很难看
  • 最重要的是,如果您禁用标志,您不希望客户看到有关禁用功能的任何内容- 也许这是即将推出的内容,并且您不想在准备好之前展示您的内容

在文件上运行预处理器来获取要分发的标头实际上并不起作用,因为这不仅会作用于功能标志,还会执行预处理器执行的所有其他操作。

没有这些缺陷的技术解决方案是什么?

c c++ architecture software-design featuretoggle

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

Opencv ...获取IPLImage或CvMat中的数据

我正在用python中的opencv做一些简单的程序.我想自己编写一些算法,因此需要获取图像中的"原始"图像数据.我不能只做图像[i,j],我怎么能得到数字?

谢谢

python opencv iplimage

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

为什么 tensorflow 中的 conv2d 给出的输出与输入的形状相同

根据这个深度学习课程http://cs231n.github.io/convolutional-networks/#conv,它说如果有x形状[W,W](其中W = width = height)的输入通过具有过滤器形状和步幅卷积层,该将返回一个形状[F,F] Soutput[(W-F)/S +1, (W-F)/S +1]

但是,当我尝试按照 Tensorflow 的教程进行操作时:https ://www.tensorflow.org/versions/r0.11/tutorials/mnist/pros/index.html 。功能好像有区别tf.nn.conv2d(inputs, filter, stride)

无论我如何更改过滤器大小,conv2d都会不断返回一个与输入具有相同形状的值。

就我而言,我使用的MNIST数据集表明每个图像都有大小[28,28](忽略channel_num = 1

但是在我定义了第一conv1层之后,我用conv1.get_shape()来查看它的输出,它给了我[28,28, num_of_filters]

为什么是这样?我认为返回值应该遵循上面的公式。


附录:代码片段

#reshape x from 2d to 4d

x_image = tf.reshape(x, [-1, 28, 28, 1]) #[num_samples, width, height, channel_num]

## define the shape of …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

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

Linux命令“ ll”不起作用

我可以用我的用户运行ll命令,但不能用sudo运行它,这给我带来了错误,因为找不到命令!

linux list

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

如何将唯一的值从一个表复制到另一个在Mysql中?

我有一个大约2.5GB的MySql数据库,

表[A]包含以下列, |anoid| |query| |date| |item-rank| |url|

我刚刚创建了另一个表[B]有仅列|query||date|

我想将所有不同的记录插入到查询列中,从表[A]到[B]分别带有日期,是否有任何快速查询?

mysql phpmyadmin

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