我写了一个简单的可变参数模板函数,我试图理解为什么它不起作用.(它的输出对应物工作得很好.)
#include <iostream>
void read() {}
template<class curr_t, class... rest_t>
void read(curr_t &var, rest_t... rest)
{
std::cin >> var;
read(rest...);
}
int main()
{
int a = 0, b = 0, c = 0;
read(a, b, c); //input: 1 2 3
std::cout << a << b << c; //output: 1 0 0
std::cin.ignore();
std::cin.get();
}
Run Code Online (Sandbox Code Playgroud)
由于可以从评论中可以看出,我输入1 2 3的a b c和输出我得到的是1 0 0.显而易见,只a保存其价值.有人可以解释为什么会发生这种情况,我该怎么做才能解决它?谢谢!
编辑::是的,显然我有参数包的概念错了!我还试图做以下事情:rest_t... &rest这给了我一个编译器错误.
相反,如果我写rest_t&... rest它按预期工作.我想这只是我身边的语法错误!感谢谁发布了这个作为答案,并在一分钟后删除了他的答案!d:
假设我有以下文件。这是无效的 C++(链接器阻塞,所以是的)还是我的语法错误?constexpr 函数的前向声明是否必须与其定义在同一个文件中?
头文件.h
extern constexpr int fun(int);
Run Code Online (Sandbox Code Playgroud)
源文件
constexpr int fun(int x)
{
return x * 2;
}
Run Code Online (Sandbox Code Playgroud) 这个问题适用于C和C++.
memcpy基本上将原始内存从一个地址复制到另一个地址.所以我的问题是:重点是wmemcpy什么?
我的意思是,它仍然是连续的空间,复制它仍然是相同的过程.如果它是由up构成wchar_t的,或者它应该是什么?
请考虑以下示例:
#include <string>
#include <sstream>
struct Location {
unsigned line;
template<typename CharT, typename Traits>
operator std::basic_string<CharT, Traits>() const {
std::basic_ostringstream<CharT, Traits> ss;
ss << line;
return ss.str();
}
};
int main()
{
using namespace std::string_literals;
Location loc{42};
std::string s1 = "Line: "s.append(loc) + "\n"s; // fine
//std::string s2 = "Line: "s + loc + "\n"s; // error
}
Run Code Online (Sandbox Code Playgroud)
注释行会导致编译错误:no match for 'operator+'.为什么?我最初的想法是,它首先用于operator std::string转换然后执行调用operator+,就像它所做的那样.append.
它只是隐式转换的一个级别,所以它应该被执行并且应该被考虑在内,不是吗?
我正在尝试制作一个锻炼计划,每次开始时都会选择随机锻炼和肌肉群.选择了肌肉群,我遇到了麻烦.
我希望它选择三个阵列中的一个但是现在dice_roll的值总是等于2.不确定我哪里出错了.谢谢你的帮助.
(OBS!请原谅我丑陋的代码,它似乎没有正确发布,所以可能会受到伤害!)
int main()
{
int muscleGroup;
string chest[2] = {"Benchpress 4x2", "Pushups 10x4"};
string legs[2] = {"Squat 8x4", "Leg extension 10x3"};
string back[2] = {"Pullup 3x8", "Rows 10x3"};
mt19937 generator;
uniform_int_distribution<int> distribution(0, 2);
int dice_roll = distribution(generator);
if (dice_roll == 0)
{
cout << "You are training: Chest" << endl;
cout << "Your exercises are going to be written below!" << endl;
}
else if (dice_roll == 1)
{
cout << "You are training: Legs" << endl;
cout …Run Code Online (Sandbox Code Playgroud) 我创建了一个 Angular 5 网站,我想使用 Webform 或 MVC 部署给客户,我只想更改 webconfig 文件中的一些变量(dbconnection、名称等),但是使用 Angular 我不知道如何去做吧。那么每次部署的时候都要重新构建,那么有没有办法解决这个问题呢?
我有2个功能。第一个功能是以写入模式打开一个文件并向其中写入一些内容,然后关闭它。
FILE *fp = fopen("file.txt", "w");
//writing itnot file using fwrite
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
第二个函数以读取模式打开文件,解析内容,然后关闭文件。
FILE *fp = fopen("file.txt", "r");
//parsing logic
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
在 中main,我依次调用function1和function2。
int main()
{
function1();
function2();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
有时,function1 fopen会失败并显示错误号 13,即权限被拒绝。我只是有时观察到这一点。我在 2 秒后引入了一个sleepin ,它开始正常工作,没有任何问题。function1fclose
所以我怀疑文件没有立即发布fclose。睡眠并不是正确的解决办法。谁能建议如何解决这个问题?我在这里给出的示例是一个用例,实际代码在线程环境中运行。
此代码给出了带有移动平均线的烛台图,但 x 轴位于索引中,我需要 x 轴位于日期中。需要做什么改变?
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ohlc
#date format in data-> dd-mm-yyyy
nif = pd.read_csv('data.csv')
#nif['Date'] = pd.to_datetime(nif['Date'], format='%d-%m-%Y', utc=True)
mavg = nif['Close'].ewm(span=50).mean()
mavg1 = nif['Close'].ewm(span=13).mean()
fg, ax1 = plt.subplots()
cl = candlestick2_ohlc(ax=ax1,opens=nif['Open'],highs=nif['High'],lows=nif['Low'],closes=nif['Close'],width=0.4, colorup='#77d879', colordown='#db3f3f')
mavg.plot(ax=ax1,label='50_ema')
mavg1.plot(color='k',ax=ax1, label='13_ema')
plt.legend(loc=4)
plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出:
所以这是代码:
template<typename, typename, typename = void>
struct has_member_type : false_type {};
template<typename T, typename Member>
struct has_member_type<T, Member, void_t<typename T::Member>> : true_type {};
struct foo { using bar = int; };
int main()
{
std::cout << has_member_type<foo, typename foo::bar>::value;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试检查是否foo有bar类型成员.如果实现没有指定类型成员的名称,它工作正常,但这样的名称硬编码到实现中,这对我不起作用.
说复制的问题并没有接近回答我的问题.正如我在上面的段落中所解释的那样,当类型被硬编码到实现中时,它很好,但是当我从外部指定类型时,我无法使它工作(这是特定的问题).代码编译良好,但产生错误的结果.
这有效:
void foo(int (&a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
void foo(int (*a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
Run Code Online (Sandbox Code Playgroud)
我考虑int (&a)[3]并int (*a)[3]具有相同的含义!