我的想法是我有一个函数可以对输入做一些算术运算,所以可能是这样的:
#include <type_traits>
#include <vector>
using namespace std;
template<typename T>
double mean(const vector<T>& vec)
{
static_assert(is_arithmetic<T>::value, "Arithmetic not possible on this type");
//compute mean (average)
}//mean
Run Code Online (Sandbox Code Playgroud)
这很好用,并且计算了我输入的所有数字类型的平均值.但是让我说我然后创建一个新类:
class foo
{
// class that has arithmetic operations created
};// foo
Run Code Online (Sandbox Code Playgroud)
在这个类的定义中,我定义了所需的运算符+和/,因此它们可以使用预期的输入.现在我想在我的新类中使用我的mean函数,但由于static_assert,它显然不会编译.那么如何告诉编译器我的新类应满足is_arithmetic<foo>::value
?
如果我在创建类时可以给它一个满足is_arithmetic的类型,那会很棒,但这似乎可能会导致type_traits出现问题?
或者我需要创建一个新的测试,检查看看
is_arithmetic<T>::value || type(T,foo)
Run Code Online (Sandbox Code Playgroud)
或类似的东西?
我更愿意只调整我的课程,而不是功能,如果可能的话,但我很想解决问题.
使用随机类和时间种子(NULL),均匀分布总是给出相同的第一个输出,即使具有不同的编译,但是在第一个输出的行为与您期望伪随机数生成器的行为相同.
这是建筑,还是我使用不正确?
MWE:
#include <ctime>
#include <iostream>
#include <random>
using namespace std;
default_random_engine gen(time(NULL));
uniform_int_distribution<int> dist(10,200);
int main()
{
for(int i = 0; i < 5; i++)
cout<<dist(gen)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
前三次我运行这个程序我得到的输出:
57
134
125
136
112
Run Code Online (Sandbox Code Playgroud)
在第二次尝试之前,我决定删除之间的空行uniform_int_distribution
,int main()
只是为了查看种子是否基于编译时间,如您所见,这无关紧要.
57
84
163
42
146
Run Code Online (Sandbox Code Playgroud)
再跑一次:
57
73
181
160
46
Run Code Online (Sandbox Code Playgroud)
所以在我的跑步中我一直是57
第一个,这当然不是世界末日,如果我想要不同的输出我可以扔掉第一个输出.但是,这是否是设计(如果是这样,为什么?)或者我是否在某种程度上滥用发生器(如果是这样的话怎么样?)就会产生疑问.
我正在写一个计时器应用程序,每30秒发一次服务并发出哔哔声(实际上有一个下拉时间会改变那个时间).
然而,当我让应用程序发出哔哔声时,哔声持续很长时间并冻结应用程序,最终(大约5秒后)它完成然后计时器赶上.为什么会这样?我该如何解决?这是我的代码:
MainActivity.java:
package com.example.servicetimer;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.media.ToneGenerator;
import android.net.Uri;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button startButton;
private Button pauseButton;
private Button resetButton;
private TextView timerValue;
private TextView timerValueMils;
private long miliTime;
private int beepTime = 0;
private boolean running = false;
private boolean beep …
Run Code Online (Sandbox Code Playgroud)