小编use*_*276的帖子

如何使is_arithmetic <myClass> :: value为true?

我的想法是我有一个函数可以对输入做一些算术运算,所以可能是这样的:

#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)

或类似的东西?

我更愿意只调整我的课程,而不是功能,如果可能的话,但我很想解决问题.

c++ templates

11
推荐指数
1
解决办法
2429
查看次数

伪随机数发生器给出相同的第一输出,但随后表现如预期

使用随机类和时间种子(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第一个,这当然不是世界末日,如果我想要不同的输出我可以扔掉第一个输出.但是,这是否是设计(如果是这样,为什么?)或者我是否在某种程度上滥用发生器(如果是这样的话怎么样?)就会产生疑问.

c++ random

10
推荐指数
1
解决办法
3088
查看次数

ToneGenerator非常重视app

我正在写一个计时器应用程序,每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)

java android tone-generator

9
推荐指数
1
解决办法
493
查看次数

标签 统计

c++ ×2

android ×1

java ×1

random ×1

templates ×1

tone-generator ×1