On Wednesday, 13 September 2023 at 05:58:13 UTC, vino wrote:
Hi All,

Request your help, I have a struct which has many functions, I need to run a function from within another function(From Display function execute the runner function), an example as below

From,
Vino

The problem starts here:

```string *runnerptr = &runner;```

You are trying to assign a delegate to string*. Even if we fix this, we hit another error because D programming language does not allow capturing a reference to this, which is not permitted in tasks (IMHO). We fix this using a lambda ```auto result = task(() => runner());```. Then the final code that runs should be like:

```d
import std.stdio: writeln;
import std.algorithm: joiner;
import std.parallelism: task;
import std.typecons: tuple;

struct MainEngine {
    int rno;
    string firstname;
    string lastname;
    int age;

    this(in int _rno) { rno = _rno; }
auto ref FirstName(in string _firstname) { firstname = _firstname; return this; } auto ref LastName(in string _lastname) { lastname = _lastname; return this; }
    auto ref Age(in int _age) { age = _age; return this; }
    auto Display () {
        auto runner(string status = "Male")
        {
auto record = tuple([firstname,",",lastname].joiner, age, status);
            return record;
        }

        auto result = task(() => runner());
        //writeln(typeof(result).stringof);
        result.executeInNewThread;
        result.yieldForce;
        return result;
    }
}

void main () {
auto mrunner = MainEngine(1).FirstName("Fname").LastName("Lname").Age(25).Display(); writeln((*mrunner).yieldForce); // Access the result field to get the value returned by the task
}
```
  • Struct nested function vino via Digitalmars-d-learn
    • Re: Struct nested function Ferhat Kurtulmuş via Digitalmars-d-learn

Reply via email to