Gaming Life

一日24時間、ゲームは10時間

C++

WindowsのC++でウィンドウアプリケーションを書く際にWinMain()を隠匿する方法の一例

序文 OpenSiv3Dなど、ユーザーが使いやすいように考えて作られたC++製Windowsアプリケーション開発用フレームワークは、複雑なシグネチャを持つ WinMain() を隠してくれる。 # include <Siv3D.hpp> // WinMain()を書く必要がない // int WINAPI WinMain(HINSTANCE hInst</siv3d.hpp>…

Pythonのデコレータ(風)をC++で実装してみる

本記事はai_9684_dctソロ Advent Calendar 2020 3日目の記事です。 Pythonには「デコレータ」という、関数に追加の機能を修飾するシンタックスシュガーが存在する。 def decorator_sample(func): def wrapper(*args, **kwargs): print(f'Arguments: {args}')…

VS 16.7以前では一時オブジェクトのアドレスを&演算子で取得してもエラーが出なかったらしい

C++

Visual Studio 2019のバージョンを16.8に上げてから、DirectX12のコードをビルドしてみたら、これまでコンパイルできていたものができなくなっていた。そのコードがこれ。 hr = m_device->CreateCommittedResource( &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYP…

【C++20】constメンバ関数の実装を要求するconcept

C++

C++20から導入されるコンセプトは、requires節を使用して、型に対してあるメンバ関数の実装を要求することが出来る。 そのメンバ関数に対して、const関数であることを要求できないかと考え、実装してみた。 #include <type_traits> template <typename T> concept Drawable = requires</typename></type_traits>…

C++のRange-based for文(範囲for文)で逆順に走査するイテレータを自作した

C++

モチベーション Pythonのfor文は、C++でいうところのRange-based for文、C#で言うところのforeachと同等の動作をする。つまり、 for (int i = 0; i < 10; i++) {} のようなforが存在しない。 Pythonのfor文において、iterable objectをenumerate メソッドに…

Visual Studio 2019でCatchを使ったC++単体テストを実現する

C++

Cppmap で紹介されていたC++用単体テストフレームワークであるCatchをVisual Studio 2019で使ってみたので、その導入に関するメモ。 github.com はじめに 説明のために、Visual Studio 2019 (以下VS2019) で、空のプロジェクトを作成。整数を受け取り2倍の値…

std::bindではデフォルト引数を省略できない

C++

std::bindを使っていたらある問題に遭遇した。 void func(int a){ std::cout << a * 10 << std::endl; } int main(){ using namespace std::placeholders; auto fuction = std::bind(func, _1); function(2); } std::bindを使ってライブラリで用意されている…

Dungeon Template LibraryをUE4で利用してLandscapeを自在に操る

@wanotaitei さんが開発しているDungeon Template Library(以後DTL) がUE4で使えそうだったので使ってみた。 DTL(ランダム地形生成ライブラリ)とUE4で遊んでみる会 #UE4 #UE4Study pic.twitter.com/un9FMRTf1e— ai (@ai_9684_dct) May 17, 2019 github.com…

OpenSiv3D C++ 反射ベクトルを計算して玉の反射を実現する1

OpenSiv3Dのリファレンスにはブロック崩しのサンプルがある。 https://scrapbox.io/Siv3D/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8F%E3%81%9A%E3%81%97 このサンプルでは玉が壁 or ブロックに衝突した時、玉の速度ベクトルのX成分もしくはY成分を反転…

C++で浮動小数点の誤差を考慮して等価比較する

C++

<cfloat>ヘッダ中にあるDBL_EPSILONを使えば誤差も考慮して2つのdouble値の等価比較ができる。 float型ならFLT_EPSILONを使えばよい。 #include <cmath> #include <cfloat> //double型のaとbを誤差考慮して比較する bool NearlyEqual(double a, double b) { return abs(a - b) < DB</cfloat></cmath></cfloat>…

ほんの少しだけラクに、C++でAtCoderに参加するバッチファイル作った

先々週のABCからAtCoderを始めた。 前回参加時はたまたまTwitterを見ていた時にコンテスト開催中だということに気づき、折角だしやるか、と衝動的に参加したため、VS2017で書いて、動くかどうかは実際提出してみて試す、なんて非効率な事をしていた。 折角や…

UE C++ UActorComponent継承クラスの子Blueprintクラスを作成できるようにする

UE4エディタ上でUActorComponent継承クラスを作ると子Blueprintクラスが作れない問題。 自動生成されたコードはこんな感じ UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class UTestActorComponent : public UActorComponent { GENER…

Qt5 QListViewのダブルクリック編集を無効にする

最近Qt5を触ってるのでそのメモ。 QListViewにQStringListModelを突っ込み、リストビューを作るのはそんなに難しくない。 #include "mainwindow.h" #include <QLayout> #include <QString> #include <QStringListModel> MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { QListView *</qstringlistmodel></qstring></qlayout>…

GitHubアカウント取った/VS2017でリポジトリ作成時エラー

といっても昔大学の講義の時に取ってたのだが。当面はSiv3D/OpenSiv3Dでの開発に利用すると思う。 github.com VS2017でリポジトリ作成時、以下のエラーメッセージが表示された。 リモート リポジトリの複製を作成中にエラーが発生しました: Git failed with …

Siv3DとC++と近況と

プログラマー志望なのにUE4のBPに頼り切りでほとんどコーディングしないのは如何なものかなーと思い最近時間が空いた時はC++ポケットリファレンスを読むようにしている。で、そろそろ何かC++で作りたいなーでもいきなりDirectX/OpenGL直で触るのはハードル高…