假设Goo是我的类型类,通常声称它是C++,Java或C#等语言中的等价接口:
class Goo goo where ham :: goo -> String
data Hoo = Hoo
instance Goo Hoo where ham _ = "Hoo!"
mustard _ = "Oh oh."
data Yoo = Yoo
instance Goo Yoo where ham _ = "Yoo!"
mustard _ = "Whew"
Run Code Online (Sandbox Code Playgroud)
但我不能回复Goo:
paak :: (Goo goo) => String -> goo
paak g = (Yoo)
-- Could not deduce (goo ~ Yoo)
-- from the context (Goo goo)
-- bound by the type signature for …Run Code Online (Sandbox Code Playgroud) 在一个内部数据类型的情况下,让函数的返回类型与从头auto foo(T f)调用时相同:sin(f)cmathf
template <typename T>
auto foo(T f) -> decltype(sin(f))
{
using std::sin;
return sin(f);
}
Run Code Online (Sandbox Code Playgroud)
这已破了.该sin(f)范围内decltype没有抬头之内std,因此只C变种sin(double)被发现,它的返回类型为double.以下程序演示了:
#include <cmath>
#include <iostream>
#include <typeinfo>
namespace meh {
struct Nanometer {};
struct SinfulNanometer {};
SinfulNanometer sin(Nanometer) { return SinfulNanometer(); }
}
template <typename T>
auto foo(T f) -> decltype(sin(f))
{
using std::sin;
std::cout << typeid(decltype(sin(f))).name() << '\n';
}
int main () {
std::cout …Run Code Online (Sandbox Code Playgroud) 我刚刚熟悉睡眠(),我发现了
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d",i);
sleep(1);
}
return 0;
Run Code Online (Sandbox Code Playgroud)
}
这不会打印每次迭代的数量而是在循环时转储所有数字....但是当我修改printf时...
#include<stdio.h>
int main()
{
int i=0;
printf("*********Testing Sleep***********\n");
for(i=0;i<10;i++)
{
printf("%d\n",i);
sleep(1);
}
return 0;
Run Code Online (Sandbox Code Playgroud)
}
现在,当我添加'\n'新行时,它按预期工作...为什么它在前一个行为奇怪......
假设我有以下功能:
// Precondition: foo is '0' or 'MAGIC_NUMBER_4711'
// Returns: -1 if foo is '0'
// 1 if foo is 'MAGIC_NUMBER_4711'
int transmogrify(int foo) {
if (foo == 0) {
return -1;
} else if (foo == MAGIC_NUMBER_4711) {
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨"缺少return语句",但我知道foo永远不会有0或不同的值MAGIC_NUMBER_4711,否则我的函数将没有定义的语义.
对此更好的解决方案是什么?这真的是一个问题,即标准说的是什么?
如何auto实施C++11?我试过跟随,它的工作原理C++11
auto a = 1;
// auto = double
auto b = 3.14159;
// auto = vector<wstring>::iterator
vector<wstring> myStrings;
auto c = myStrings.begin();
// auto = vector<vector<char> >::iterator
vector<vector<char> > myCharacterGrid;
auto d = myCharacterGrid.begin();
// auto = (int *)
auto e = new int[5];
// auto = double
auto f = floor(b);
Run Code Online (Sandbox Code Playgroud)
我想检查一下如何使用plain来实现 C++
嗨,我正在尝试为我的MathJax输出添加样式.特别是我想为我的方程设置一个全局颜色(以便它匹配我页面其余部分的样式).目前我有以下配置.
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$', '$'] ],
displayMath: [ ['$$', '$$']],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
messageStyle: "none",
"HTML-CSS": {
preferredFont: "TeX",
availableFonts: ["STIX","TeX"],
styles: {".MathJax" {color: "#CCCCCC";}}
}
});
</script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
但是,如果我styles在我的配置中包含标记,我的页面上的数学就完全拒绝显示.另一方面,如果我删除它,它显示正常.
编辑:我还应该注意,我已经尝试将样式直接添加到我的CSS中,如其他问题所示,但这导致了同样的事情,根本没有显示数学.
更新:我已经添加了:正如Davide在下面建议的那样,现在我的方程显示但是样式信息被忽略了.样式似乎是从页面主体继承的,但是将数学包装在具有不同样式的div中似乎也不会影响它.
UPDATE2:我已经解决了mathjax忽略样式命令的问题.文本的颜色由我的CSS*{color:#292929}中的一行全局设置.这意味着MathJax的样式被忽略了.只需将*更改为body,a,p,h1,h2即可解决问题.
这是我的代码和要求:
我有2个A和B类,它们没有任何继承.我使用A类的一个方法来调用B类的一个方法.然后B类的方法应该回调A类的一个方法来执行一个回调.
部分代码:
classA.h:
#include "classB.h"
class classA
{
public:
classA();
classB *pClassB;
void callClassB();
void callBack();
};
Run Code Online (Sandbox Code Playgroud)
classA.cpp:
#include "classA.h"
classA::classA()
{
pClassB = new classB();
}
void classA::callBack()
{
return;
}
void classA::callClassB()
{
pClassB->callFunction();
}
Run Code Online (Sandbox Code Playgroud)
classB.h:
class classB
{
public:
classB();
void callFunction();
}
Run Code Online (Sandbox Code Playgroud)
classB.cpp:
#include "classB.h"
classB::classB()
{
}
void classB::callFunction()
{
// I should call classA's callback here!
}
Run Code Online (Sandbox Code Playgroud)
问题是,我不能在classB.h中包含classA.h,因为它会在其他地方引起一些编译问题(我无法解决).我不能将classB作为classA的子类(如果可以的话,我只需要做classA::callBack()).那么这种情况有解决方案吗?
更新:这是我修改过的:
class classB
{
public:
classB(classA& pCallBack);
void callFunction();
void (classA::*m_callback)(void);
};
classA::classA() …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试制作一个简单的应用程序来测试用户.它会询问一个问题并且用户回答1,2,3或4.然后应用程序接受该答案,如果正确,则将total_score添加+1,最后将显示该值.一切看起来都很合理,但是当我运行它并且我到达该if (q1_valid == false)部分时它会跳过cout并运行goto,无论q1_valid是true还是false.
#include <iostream>
using namespace std;
int main()
{
int q1_answer;
int total_score;
bool q1_correct;
bool q1_valid;
Question_1:
cout << "Question 1 (#3 is correct)" << endl;
cout << "1.) Answer 1" <<endl;
cout << "2.) Answer 2" <<endl;
cout << "3.) Answer 3" <<endl;
cout << "4.) Answer 4" <<endl;
cin >> q1_answer;
if (q1_answer == 1)
q1_correct = false;
q1_valid = true;
if (q1_answer == 2)
q1_correct = false;
q1_valid = true;
if …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,我需要在工作失败的情况下返回错误代码.但是这样做的"规则"是什么?
例如:
if(tryDoUpload() == false) {
//upload failed
int UPLOAD_FAILED = 0x0;
}
Run Code Online (Sandbox Code Playgroud)
看0x0,是否有设置此错误代码的模式或我可以设置任何?
我希望这很清楚.
我想做这样的事情(显示我在SDL游戏中运行的FPS):
SDL_WM_SetCaption("FPS: " + GetTicks(&fps)/1000.f, NULL);
Run Code Online (Sandbox Code Playgroud)
但Visual Studio intellisens抱怨表达式必须具有整数或枚举类型.
我做错了什么?