3

私はC ++でこの関数を持っています

double f_x(double y , string sfy )
{
  return sfy;
}
  1. ファイルから文字列 sfy を読み取り、それを f_x 関数に渡したいです。
  2. sfy には、y または cos(y) または exp(y) のようなものが含まれます。
  3. f_x に y と sfy を渡すと、f_x が sfy を計算して返します。

1番と3番はできるのですが、f_xの型がdoubleでsfyがstringなのでエラーになってしまいます。

f_x のタイプを double または float にする必要がある他のものに変更することはできません。

この問題を解決するにはどうすればよいですか。つまり、f_x が sfy を double として返すにはどうすればよいですか。

4

1 に答える 1

6

おそらく、次のようなものです。

#include <map>
#include <string>
#include <fstream>
#include <iostream>
#include <cmath>

std::map<std::string, double(*)(double)> m;

double f_x(double y , std::string sfy )
{
    if (m.find(sfy) == m.end()) throw "Invalid operation.";
    return m[sfy](y);
}

int main()
{
    m["exp"] = std::exp;
    m["cos"] = std::cos;
    m["sin"] = std::sin;

    std::ifstream file("test.txt");
    std::string op;
    std::getline(file, op);

    std::cout << f_x(42.0, op);
}
于 2012-08-19T13:01:29.237 に答える