我试图从包含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建议的 - 创建一个静态库?
对关键容器的键类型(例如std :: map)的比较器的要求是它对键类型的元素施加严格的弱顺序.
对于给定的比较器,comp(x, y)我们定义equiv(x, y) = !comp(x, y) && !comp(y, x).严格弱势秩序
的要求comp(x, y)是
!comp(x, x)适合所有人x)comp(a, b)和comp(b, c)再comp(a, c)).equiv(a, b)和equiv(b, c)然后equiv(a, c))std::less<float>(默认比较器)使用operator<,因为没有创建严格的弱顺序NaN.由于x < NaN和NaN < x是全是假的x,NaN就相当于这个比较下的所有花车,这打破条件#3:equiv(1.0, NaN)和equiv(NaN, 2.0),但不会equiv(1.0, 2.0).对于除NaN之外的IEEE浮点数,它是一个严格的弱顺序(其中每个数字都有自己的等价类,除了0和-0).
这是否意味着C++标准不允许使用IEEE浮点数(和(长)双精度数)作为关联容器中的键类型,因为上述问题,即使我确保NaN永远不会插入到容器中?我不太确定 …
我正在研究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) 我很喜欢增加可变参数模板,并开始摆弄这个新功能.我试图了解std::index_sequences 的实现细节(用于元组实现).我看到那里的示例代码,但我真的想要逐步解释如何std::index_sequence编码和每个阶段的元编程主题.想真的傻了:)
c++ templates template-meta-programming variadic-templates c++14
我有这样的数据结构:
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中的线性) …
我试图在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)
提前致谢
我正在尝试用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)
from autograd import grad, multigrad
grad_cost= multigrad(cost, argnums=[0,1])
Run Code Online (Sandbox Code Playgroud)
shape = …Run Code Online (Sandbox Code Playgroud) 关于功能标志/切换以及为什么要使用它们存在相当多的讨论,但大多数关于实现它们的讨论都围绕(网络或客户端)应用程序进行。如果您的产品/工件是 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相同的功能标志来使事情正常工作在文件上运行预处理器来获取要分发的标头实际上并不起作用,因为这不仅会作用于功能标志,还会执行预处理器执行的所有其他操作。
没有这些缺陷的技术解决方案是什么?
我正在用python中的opencv做一些简单的程序.我想自己编写一些算法,因此需要获取图像中的"原始"图像数据.我不能只做图像[i,j],我怎么能得到数字?
谢谢
根据这个深度学习课程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) 我有一个大约2.5GB的MySql数据库,
表[A]包含以下列, |anoid| |query| |date| |item-rank| |url|
我刚刚创建了另一个表[B]有仅列|query|和|date|
我想将所有不同的记录插入到查询列中,从表[A]到[B]分别带有日期,是否有任何快速查询?