我使用的是自定义类型Vector的线程安全队列。它显示以下错误。我不确定我在这里错过了什么。
错误C2664“std::vector>::vector(std::vector<_ty,std::allocator<_ty>>&&,constalloc&)noexcept()”:无法将参数2从“int”转换为“const std::allocator<_ty>&”。
#include <mutex>
#include <condition_variable>
#include <queue>
#include <memory>
#include <iostream>
#include <thread>
template<typename T>
class threadsafe_queue
{
private:
mutable std::mutex mut;
std::queue<T> data_queue;
std::condition_variable data_cond;
public:
threadsafe_queue()
{}
threadsafe_queue(threadsafe_queue const& other)
{
std::lock_guard<std::mutex> lk(other.mut);
data_queue = other.data_queue;
}
void push(T new_value)
{
std::lock_guard<std::mutex> lk(mut);
data_queue.push(new_value);
data_cond.notify_one();
}
void wait_and_pop(T& value)
{
std::unique_lock<std::mutex> lk(mut);
data_cond.wait(lk, [this] {return !data_queue.empty(); });
value = data_queue.front();
data_queue.pop();
}
std::shared_ptr<T> wait_and_pop()
{
std::unique_lock<std::mutex> lk(mut);
data_cond.wait(lk, [this] {return !data_queue.empty(); });
std::shared_ptr<T> res(std::make_shared<T>(data_queue.front()));
data_queue.pop();
return res;
}
bool try_pop(T& value)
{
std::lock_guard<std::mutex> lk(mut);
if (data_queue.empty)
return false;
value = data_queue.front();
data_queue.pop();
}
std::shared_ptr<T> try_pop()
{
std::lock_guard<std::mutex> lk(mut);
if (data_queue.empty())
return std::shared_ptr<T>();
std::shared_ptr<T> res(std::make_shared<T>(data_queue.front()));
data_queue.pop();
return res;
}
bool empty() const
{
std::lock_guard<std::mutex> lk(mut);
return data_queue.empty();
}
};
class cp_data
{
public:
int num;
double time;
cp_data(int a, double b)
{
num = a;
time = b;
}
};
int main() {
std::vector<cp_data> data(1,2);
threadsafe_queue<std::vector<cp_data>> temp_queue;
temp_queue.push(data);
system("pause");
}
vector没有构造函数将其参数转发到它所持有的数据类型以创建单个元素。
但是,您可以使用std::initializer_list
构造函数通过以下操作传入一个对象(如果愿意,也可以传入多个对象):
改变
std::vector<cp_data> data(1,2);
std::vector<cp_data> data{{1,2}};
std::vector<cp_data> data{cp_data(1,2)};
我有一个NN,它有两个相同的CNN(类似于暹罗网络),然后合并输出,并打算在合并的输出上应用自定义损失函数,如下所示: 在我的自定义损失函数中,我需要将y垂直分解为两块,然后对每一块应用分类交叉熵损失。但是,我不断从我的损失函数得到dtype错误,例如: ()中的ValueError回溯(最近一次调用)---- /usr/local/lib/python3。5/地区包/KERA/发动机/培训。编译
本文向大家介绍Rust 自定义错误类型,包括了Rust 自定义错误类型的使用技巧和注意事项,需要的朋友参考一下 示例
问题内容: 我对SQLITE相当陌生,我注意到只有4种数据类型,但是我在网上看到的例子中人们在放置自己的数据类型。我对此不太了解,想知道是否有人可以向我解释。例如,我看到一列将保存日期,并且给定的数据类型是不存在的时间戳。默认是什么?自己制作时默认为文本吗? 问题答案: 使用动态类型系统。只有五个存储类:NULL,整数,实数,文本和blob。(来源:SQLite版本3中的数据类型。) 并且,引用该
Rust 有两种常量,可以在任意作用域声明,包括全局作用域。这两种常量都要显式地标注: const: 不可改变的值(常用类型)。 static: 在 'static 生命周期内可能发生改变的变量。 有个特例就是 "string" 原始类型。可以给它直接赋一个不可改变的 static 变量,是因为它的 类型标记:&'static str 包含了生命周期 'static。其他的引用类型都必须特别注明从
/usr/include/C++/4.8/ext/new_allocator.h:在实例化'void__gnu_cxx::new_allocator<_tp>::construct(_up*,_args&&...)[with_up=UNDIR_W_EDGE;_args={const UNDIR_W_EDGE&};_tp=UNDIR_W_EDGE]':/usr/include/c++/4.8/bit
4.4.5 数据类型的自定义 在有了一些数据类型后,程序员还可定义这些数据类型的别名或指针类型。表达这种定义的伪指令是TYPEDEF,其定义形式如下: 新数据类型名 TYPEDEF [位距] [PTR] 数据类型 其中:“位距”是NEAR、FAR或PROC等。 例如: CHAR TYPEDEF BYTE ;给BYTE定义另一个别名CHAR PCHAR TYPEDEF PTR CHAR ;定义一个字